Если вы хотите по-настоящему безопасный код, подход с белым списком («разрешить только эти вещи: ...»), как правило, более прочный, чем подход «черного списка» («не допускайте этих вещей: ...»).
Вы упомянули HTML-очиститель и что «у него нет возможности удалить все атрибуты событий».
Это технически правильно, так как вы не можете сообщить, чтобы удалить атрибуты событий. Причина в том, что это точка продажи, но это автоматически. Опция «отсутствует» - это возможность настроить HTML-очиститель на , чтобы атрибуты события. Это сознательно неловко. HTML очиститель (как следует из названия) имеет сильную направленность безопасности.
Есть некоторые «небезопасные HTML» аспекты, которые вы можете позволяют использовать конфигурацию HTML очистителя (конфигурация по умолчанию намеренно разборчивы), но атрибуты событий не среди них. (Ну, вы могли бы научить HTML-очиститель принимать их, если вы прыгали через обручи, но это потребует больших усилий.)
Я бы рекомендовал попробовать еще раз, если вы хотите принять пользовательский HTML. Это довольно простой инструмент, проверенный многими людьми.
Есть несколько очень сложных способов разбить HTML и ввести JavaScript. Например, знаете ли вы, что вы можете использовать JavaScript, используя атрибут или href
? Знаете ли вы, что в некоторых браузерах вы можете использовать JavaScript, используя тег style
?Взгляните на this XSS cheatsheet. Это может дать вам общее представление о том, с чем вы столкнулись, и почему белый список обычно считается более эффективным.
В любом случае, удачи!
осмелюсь спросить, почему? –
@Dagon У меня есть форма, которая позволяет пользователю отображать свой HTML-код своей статьи, но ограничивать их использованием нулевого javascript: никаких тегов скриптов, никаких тегов ссылок и DEFINITELY без тегов атрибутов событий. – user1105430
[Это то, что вы имеете в виду] (http://ideone.com/6FsFa) – SamSquanch