Предотвратить атаки XSS - PullRequest
       1

Предотвратить атаки XSS

3 голосов
/ 19 января 2012

Безопасен ли этот код для предотвращения атак 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;        
  ?>

Ответы [ 3 ]

8 голосов
/ 19 января 2012

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

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

3 голосов
/ 20 января 2012

Нет, 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.

1 голос
/ 19 января 2012

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

Сохраните данные в базе данных без фильтрации и удалите ихпри выводе:

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