2013-12-04 5 views
0

Я довольно новичок в XSS и очистителе HTML (исследуется на несколько дней). Тем не менее, я был программистом и веб-разработчиком на протяжении многих лет. (Да, я знаю, стыдно, что я не сталкивался с XSS. Я думал, что это похоже на материал. Но он не исследовал его подробно.)HTML очиститель от внешних ресурсов

AFAIK, атакующие могут загружать свои злые внешние JS в таких местах, как IMG SRC, а в других действительных теги ". Поэтому я понимаю, что если я запрещаю html пользователю загружать ресурсы за пределами моего домена (и очищать то, что у меня уже есть в документе/базе данных), могу ли я сказать, что на моем сайте нет атак XSS?

Позвольте мне перефразировать и структурировать мои запросы.

Во-первых, я собираюсь создать веб-сайт, который позволяет пользователям вводить (напрямую или через выгрузку) html-коды. Довольно типично.

Я буду использовать очиститель HTML для «очистки» кодов пользователей.

Первый вопрос: (Q1) Даже после использования HTML-очистителя злоумышленники могут загружать свои злые скрипты с помощью действительных атрибутов html. Это правда?

И (Q2) Я полагаю, я не могу позволить < скрипт> в настройке очистителя HTML, так как любые злые вещи могут произойти в JS в теге < скрипт>. Это правда?

(Q3) Может ли очиститель HTML выделять все ссылки в любом месте текста, которые не относятся к доменам, которым я доверял?

И, наконец, теоретический вопрос (Q4) Если текст был очищен HTML и не содержит внешних ссылок, можем ли мы сказать, что он абсолютно свободен от XSS?

P.S. еще одна вещь заключается в том, что я хотел бы разрешить некоторые (очень ограниченные) JS. Как вы думаете, нормально ли конвертировать (мои пользовательские) теги, такие как [ajax: getUserName] в настоящий JS, в конечном процессе?

Большое спасибо!

ответ

1

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

Q1: Если вы используете HTML Purifier, как описано в документации (используйте его для очистки HTML, поместите результат очистителя HTML только в контексте HTML, правильно настройте кодировку символов), тогда злоумышленники не смогут загружать свои скрипты. Он «безопасен» из коробки.

Q2: HTML-очиститель не позволит разрешить сценарий > <; он отклонит его как неизвестное.

Q3: К сожалению, в настоящее время HTML-очиститель напрямую поддерживает черные списки в именах хостов (используя% URI.HostBlacklist) и разрешает только локальные ссылки (% URI.DisableExternal). Но вы можете определить фильтр URI для более сложной политики.

Q4: Никакое ограничение внешних связей не требуется, оно должно быть свободным от XSS.

PS: Это нормально, если вы справляетесь с выходом пользовательского ввода, который включен в JS правильно.

+0

+1 Большое спасибо за ваш ответ. Re (Q1) я прочитал несколько сообщений, говорящих, что если атрибут связывается с внешним злым ресурсом, HTML Purifier не может очистить содержимое в нем. Это имеет смысл для меня, а также меня беспокоит. Не могли бы вы еще немного объяснить, как очиститель HTML обрабатывает эту ситуацию? Для (Q3) является '% URI.DisableExternal' вещь, которую я ищу? Большое спасибо!! – midnite

+0

«Сообщение», о котором я упомянул, будет в http://htmlpurifier.org/phorum/read.php?3,6194 ** Запись MGH ** в октябре 06, 2013 04:17. И я считаю, что я прочитал несколько вопросов stackoverflow о подобной вещи. – midnite

+0

Это другая проблема, связанная с тем, что HTML-очиститель позволяет HTML-код, который может заставить браузер выполнять дополнительные запросы GET (например, изображения). Вы можете отключить это, установив% URI.DisableResources (но это отключит изображения) –

Смежные вопросы