Безопасность 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() и другие функции, которые, по-видимому, достаточно точно отвечают вашим потребностям.

http://codeigniter.com/user_guide/libraries/security.html

Другие вопросы по тегам