В HTML есть несколько специальных символов & '"
, которые имеют значение для парсера DOM. Это символы, которые популярные функции, такие как PHP htmlspecialchars , преобразуют в объекты HTML, чтобы они случайно не сработали при синтаксическом анализе.
Выполненные переводы:
- '&' (амперсанд) становится
&
«
(двойная кавычка) становится»
когда ENT_NOQUOTES не установлен.'
(одинарная кавычка) становится' только
когда установлен ENT_QUOTES.- '
- '>' (больше чем) становится
>
Однако я помню, что в старых браузерах, таких как IE6, также было другие последовательности байтов , из-за которых анализатор DOM браузера интерпретировал содержимое как HTML .
Это все еще проблема? Если вы отфильтруете только эти 5 символов, этого достаточно для предотвращения XSS?
Например, вот все известные комбинации символа «
<
%3C
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
\x3c
\x3C
\u003c
\u003C