Как исправить уязвимости XSS на JavaScript? - PullRequest
2 голосов
/ 03 сентября 2011

1) Я получаю ответ с тегами html, например: Это <b>Test</b>

2) иногда ответ может содержать теги сценария (или iframe, canvas и т. Д.), Например: XSS:This <script>alert("Hello from XSS")</script> is <b>Test</b>

3) как удалить все теги XSS (script, iframe, canvas ...), кроме других тегов html?

PS: я не могу использовать escape, потому что этоудалить <b>, <strong> и другие теги.

Ответы [ 3 ]

5 голосов
/ 03 сентября 2011

как удалить все теги XSS (script, iframe, canvas ...), кроме других тегов html?

Все теги могут скрывать риски XSS. Например <b onmouseover="...">, <a href="javascript:..."> или <strong style="padding: expression(...)">.

Чтобы сделать HTML «безопасным», необходимо отфильтровать его, чтобы разрешить только минимальный набор известных безопасных элементов и атрибутов . Все атрибуты URL нуждаются в дальнейшей проверке известных протоколов. Это известно как «белый список».

Это непростая задача, поскольку вам, как правило, придется правильно анализировать HTML, чтобы определить, какие элементы и атрибуты присутствуют. Простого регулярного выражения будет недостаточно для выбора диапазона потенциально проблемного контента, особенно в JavaScript, который имеет относительно ограниченный механизм регулярных выражений (без просмотра назад, ненадежного просмотра и т. Д.).

Существуют инструменты для серверных языков, которые сделают это за вас, например, PHP Purifier HTML. Я бы порекомендовал использовать один из них на стороне сервера перед возвратом контента, так как в настоящее время я не знаю хорошей библиотеки такого рода для JavaScript.

1 голос
/ 03 сентября 2011

Вам не нужно удалять теги, просто сделайте перевод.Например, поверните < в &lt;, > в &gt; и т. Д.

Если вы используете php, некоторые функции предназначены для этого:

htmlspecialchars

htmlentities

0 голосов
/ 23 апреля 2014

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

/*Using jQuery : the script to escape HTML/JS characters*/
function htmlEncode(value) {
     if (value) {
         return $('<div/>').text(value).html();
     } else {
         return '';
     }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...