Intereting Posts
Как получить все в массиве assoc из подготовленного оператора? как защитить изображения внутри папки загрузки от просмотра кем-либо ЗА ИСКЛЮЧЕНИЕМ admin Как найти режим массива в PHP Предварительный просмотр изображения CKEditor и KCfinder на GoDaddy MySql – bigints, php и auto string / int casting flip-flopping Как получить show_error () в CodeIgniter для загрузки представления? PHP. Определите, будет ли дата в будущем использовать объект DateTime. в foreach, isLastItem () существует? Как создать массив из этого набора результатов (вложенные категории, хранящиеся в базе данных с моделью обхода)? Создать дату / время, когда формат неизвестен Symfony2 / Datatable Bundle – ошибка: установите идентификатор datatable в вашем действии с помощью «setDatatableId», используя идентификатор из вашего представления Условная проверка Silverstripe Арабский скрипт в формате PDF, созданный UFPDF PHP – значение от переменной до постоянной Каковы некоторые хорошие ресурсы, которые помогут мне внедрить поддержку Kerberos A & A в PHP?

Предотвращение атак XSS

Безопасен ли этот код для предотвращения атак XSS?

<?php $string = "<b>hello world!</b>"; echo "without filtering:".$string; echo "<br>"; $filtered = htmlspecialchars($string); // insert into database filtered echo "After filtering:".$filtered; echo "<br>"; $de_filtering = htmlspecialchars_decode($filtered); //retrieve from database and display echo "After de-filtering:".$de_filtering; ?> 

Вы не должны кодировать HTML-Specialchars при вставке в базу данных, таким образом обрабатываются данные (и, возможно, разные при редактировании набора данных). Вы должны их кодировать при отображении.

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

Нет, XSS не зависит от базы данных. Чтобы избежать SQL-инъекции, вы хотите избежать использования чего-то вроде mysql_real_escape_string или использовать подготовленные операторы, но чтобы избежать XSS, вам нужно сбежать при выводе в HTML.

И есть еще пара ошибок. Взгляните на чит-лист OWASP XSS . В нем объясняется, как сбежать для разного контекста.

htmlspecialchars / htmlentities будут защищать вас, если вы выведете недоверенные данные между тегами, но не будете защищать вас, если вы выведете его в качестве обработчика событий javascript, например:

 &lt;button onclick="confirm('do you want to delete &lt;?php echo htmlspecialhars($untrusted_data) ?&gt;')"&gt; 

Это потому, что вы ускользаете для HTML, а не для javascript.

Нет. Вы фильтруете данные перед тем, как поместить их в базу данных (что необязательно), но отменив фильтр при выводе данных.

Храните данные в базе данных без фильтрации и избегайте их при выводе:

  echo htmlspecialchars($unfiltered_data_from_database);