2012-03-24 5 views
4

Я хочу предоставить HTML-редактор на своем сайте, но не хочу открывать себя для xss или других атак, которые поставляются с предоставлением пользовательского HTML.Как отфильтровать Dangerous HTML, например SO?

Это очень похоже на то, что делает переполнение стека. Как HTML проверяется/очищается здесь, так что информация о стилизации остается, в то время как другие, более опасные вещи (например, javascript, iframe и т. Д.) Не используются?

Есть ли библиотеки (желательно на PHP), которые уже делают это?

+0

Задайте это по meta. – j08691

+0

Вероятно, лучше спросить на meta.stackoverflow.com –

+0

Самый простой способ - использовать список известных безопасных и разрешенных HTML-тегов, а не пытаться отфильтровывать плохие вещи. –

ответ

3

PHP имеет функцию strip_tags, которая удаляет теги HTML и PHP из строки и позволяет указать определенные допустимые теги. Но, как утверждает @webarto, есть libraries, которые делают это лучше.

От PHP Manual.

+4

Это не решение ... http://htmlpurifier.org/ –

+0

@webarto как писать, например '>' и '<', но сделать их видимыми в результате? –

+0

@ RokoC.Buljan 'htmlspecialchars' или' htmlentities' ... –

-1

В добавление к сообщению Whymarrh, предложение заключается в том, чтобы работа кода выполнялась в подпапке вашего сайта и автоматически изменяла любой код, который имеет «..» или «http: //» или любые команды mysql ,

+0

Это должно быть опубликовано как комментарий, а не отдельный ответ. – brbcoding

0

Вы можете использовать

strip_tags($yourData,"<a><p><div><i>") // more tags you want to keep; 

Если с помощью SQL тоже использовать

mysql_real_escape_string($data); 

Это действительно все, что вам нужно, чтобы не получить впрыскивается. Помните, что при использовании реального спасения mySQL вам нужно использовать strip slashes, чтобы удалить их, когда вы их эхо.

Вот документы для strip tags и документы для mysql escape.

0

Если вы хотите разрешить некоторые (X) HTML и ограничить только теги, которые рассматриваются как небезопасные, вы можете использовать что-то вроде KSES. Wordpress использует такое решение.

http://sourceforge.net/projects/kses/