Защита от XSS-эксплойтов? - PullRequest
7 голосов
/ 24 марта 2011

Я новичок в PHP, но слышу, что XSS-эксплойты плохие.Я знаю, что это такое, но как мне защитить свои сайты?

Ответы [ 4 ]

10 голосов
/ 24 марта 2011

Чтобы предотвратить атаки XSS, вам просто нужно проверить и правильно проверить все введенные пользователем данные, которые вы планируете использовать, и не разрешать вставку html или javascript-кода из этой формы. Или вы можете использовать htmlspecialchars () для преобразования символов HTML в объекты HTML. Таким образом, такие символы, как <>, которые отмечают начало / конец тега, превращаются в html-сущности, и вы можете использовать strip_tags (), чтобы разрешить только некоторые теги, поскольку функция не удаляет вредные атрибуты, такие как onclick или onload.

4 голосов
/ 24 марта 2011

Удаление всех пользовательских данных (данных в базе данных от пользователя) с помощью функции htmlentities () .

Для данных HTML (например, из редакторов WYSIWYG) используйте Очиститель HTML для очистки данных перед их сохранением в базе данных.

0 голосов
/ 28 июля 2015

Плохие новости

К сожалению, предотвращение XSS в PHP - нетривиальное мероприятие.

В отличие от SQL-инъекция , которую вы можетеСмягчить с помощью подготовленных заявлений и тщательно отобранных белых списков, невозможно обеспечить надежный способ отделить информацию, которую вы пытаетесь передать в ваш HTML-документ, от остальной части структуры документа.

Хорошие новости

Однако вы можете смягчить известные векторы атак, проявляя особую осторожность с выходом из системы ( и поддерживая программное обеспечение в актуальном состоянии ).

Самое важное правило, о котором следует помнить: Всегда экранировать на выходе, никогда на входе. Вы можете безопасно кэшировать экранированный выход, если вы беспокоитесь о производительности, но всегда сохраняете и работаете с неэкранированными данными.

Стратегии смягчения последствий XSS

В порядке предпочтения:

  1. Если вы используете шаблонизатор (например, Twig, Smarty, Blade), убедитесь, что он предлагает контекстно-зависимыйЭто убегает.По опыту я знаю, что это делает Твиг.{{ var|e('html_attr') }}
  2. Если вы хотите разрешить HTML, используйте Очиститель HTML .Даже если вы думаете, что принимаете только Markdown или ReStructuredText, вы все равно хотите очистить HTML, выводимый этими языками разметки.
  3. В противном случае используйте htmlentities($var, ENT_QUOTES | ENT_HTML5, $charset) и убедитесь, что в остальной части документа используется тот же набор символов, что и $charset.В большинстве случаев 'UTF-8' является желаемым набором символов.

Почему я не должен фильтровать на входе?

Попытка отфильтровать XSS на входе преждевременная оптимизация , что может привести к неожиданным уязвимостям в других местах.

Например, недавняя уязвимость WordPress XSS использовала усечение столбцов MySQL, чтобы нарушить их стратегию побега и позволить преждевременно сбежавшей полезной нагрузке бытьхранится небезопасно.Не повторяйте их ошибку.

0 голосов
/ 24 марта 2011

strip_tags(), если вы хотите, чтобы у вас вообще не было тегов.Что-то вроде <somthinghere>
htmlspecialchars() будет преобразовывать их в html, поэтому браузер будет только показывать и не пытаться их запустить.
Если вы хотите разрешить хороший HTML, я бы использовал что-то вроде htmLawed или htmlpurifier

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...