Безопасность XSS - удалите все скрипты, разрешите все остальное
На нашей веб-странице мы показываем сторонний HTML-код, который должен правильно отображать большинство вещей, включая ссылки и изображения. Мы в основном хотим продезинфицировать против всех сценариев, т.е.
<script>...</script>
Но все может стать довольно креативным. Простой случай, когда сценарий может отображаться вне тега "script",
<a href="javascript:alert('XSS')">
И нам обязательно нужно разрешить ссылки.
На самом деле, как я уверен, многие из вас знают, проблема довольно жестокая: http://ha.ckers.org/xss.html
Если вы находитесь в ситуации, когда пользователи публикуют комментарии на вашем сайте, вы можете просто избежать всего HTML или, возможно, всего HTML, кроме <em>
, <i>
, <u>
а также <s>
, В моем случае нам нужно разрешить весь HTML, но отключить все сценарии, что намного сложнее, но не является редким требованием. Есть ли библиотека или инструмент, который поддерживает этот уровень HTML-допустимости и безопасности XSS?
Язык в порядке предпочтения: Python, PHP, Java, C/C++.
4 ответа
Я бы предложил не что иное, как самое надежное средство защиты от XSS, которое вы можете найти. В общем, лучший подход заключается в внесении в белый список элементов и атрибутов (и значений), которые вы хотите разрешить, а не в черный список тех, которые вы не разрешаете.
Я могу предложить только решение на основе PHP в HTML Purifier, которое в дополнение к безопасности помогает обеспечить правильность разметки (отлично подходит для предоставленных пользователем фрагментов HTML).
Я вижу, вы нашли http://ha.ckers.org/ - я также предлагаю использовать OWASP (Open Web Application Security Project) в качестве ресурса.
AFAIK, на этом сайте перечислены только целые инъекции XSS. Методы, аналогичные strip_tags
не будет работать с фрагментированным (многоточечным) впрыском, который я считаю более скрытным. Лучшее, что вы можете сделать, это закодировать ваши символы с помощью чего-то вроде PHP htmlentities
перед отображением их на странице. Но это помешало бы отображению HTML.
Вы можете сделать альтернативную разметку, например, как это делают форумы [code][/code]
синтаксис). Также рассмотрите возможность использования Markdown, того же редактора, который используется здесь в Stackru, который прост в использовании, если вам нужно только форматирование текста.
Вы можете использовать javascript (или jQuery), чтобы либо проверить перед отправкой страницы, что ваш href имеет форму http:// для любого <a>
тег с использованием регулярных выражений.
Рассматривали ли вы использование фреймворка PHP, CodeIgnitor?
Есть класс безопасности, который включает в себя функцию xss_clean() и другие функции, которые, по-видимому, достаточно точно отвечают вашим потребностям.