Достаточно ли использовать htmlspecialchars () во всех ситуациях? - PullRequest
6 голосов
/ 12 ноября 2011

Моим пользователям разрешено вставлять что-либо в мою базу данных.

Таким образом, использование белого / черного списка символов не является вариантом.конец базы данных (SQL-инъекция), а точнее внедрение кода на моих страницах.

Есть ли ситуации, когда htmlspecialchars() недостаточно для предотвращения внедрения кода?

Ответы [ 4 ]

2 голосов
/ 12 ноября 2011

Обычного htmlspecialchars недостаточно при вставке пользовательского текста в атрибуты, заключенные в одинарные кавычки.В этом случае вам нужно добавить ENT_QUOTES и передать кодировку.

<tag attr='<?php echo htmlspecialchars($usertext);?>'> //dangerous if ENT_QUOTES is not used

При вставке пользовательского текста в javascript / json в виде строки вам потребуется дополнительное экранирование.

Я думаю, что это не подходит и для наборов странных символов.Но если вы используете одну из обычных кодировок UTF-8, Latin1, ... она будет работать как положено.

2 голосов
/ 12 ноября 2011

Использование htmlspecialchars достаточно при вставке внутрь кода HTML.Способ кодирования символов делает невозможным для результирующего текста «вырваться» текущего элемента.Таким образом, он не может ни создавать другие элементы, ни сегменты скрипта и т. Д.

Однако во всех других ситуациях htmlspecialchars этого недостаточно автоматически.Например, когда вы используете его для вставки кода в некоторую область JavaScript, например, когда вы заполняете его строкой JavaScript, вам понадобятся дополнительные методы, чтобы сделать его безопасным.В этом случае addslashes может помочь.

Таким образом, в зависимости от того, куда вы вставляете полученный текст, htmlspecialchars дает вам достаточно безопасности или нет.Как уже указывает название функции, она просто обещает безопасность для HTML.

2 голосов
/ 12 ноября 2011

Нет, этого недостаточно во всех ситуациях. Это сильно зависит от вашей кодовой базы. Например, если вы используете JavaScript для выполнения определенных запросов AJAX к базе данных, htmlspecialchars() иногда будет недостаточно (в зависимости от того, где вы его используете). Если вы хотите защитить куки от JavaScript XSS, htmlspecialchars() также будет недостаточно.

Вот несколько примеров, когда htmlspecialchars() может дать сбой: https://www.owasp.org/index.php/Interpreter_Injection#Why_htmlspecialchars_is_not_always_enough. Ваш вопрос также сильно зависит от того, какую базу данных вы используете (не все используют MySQL). Если вы пишете сложное приложение, я настоятельно рекомендую использовать одну из многих фреймворков, которые абстрагируют эти надоедливые небольшие особенности и позволяют беспокоиться о коде приложения.

0 голосов
/ 12 ноября 2011

htmlspecialchars будет достаточно. С < и >, конвертируемыми в &lt; и &gt;, вы больше не можете включать скрипты.

...