Преимущества htmlpurifier вместо фильтрации регулярных выражений - PullRequest
1 голос
/ 05 августа 2010

Недавно мы внедрили htmlpurifier в наше веб-приложение. Ранее у нас были регулярные выражения для соответствия общеизвестным инъекциям XSS (script, img и т. Д. И т. Д.). Мы поняли, что этого недостаточно, и перешли на htmlpurifier. Теперь, учитывая, что htmlpurifier работает медленно (очень медленно по сравнению с методом регулярных выражений, который мы использовали ранее), стоит ли иметь htmlpurifier? Или имеет смысл продолжать увеличивать фильтрацию регулярных выражений до тех пор, пока мы не достигнем удовлетворительного уровня (можно утверждать, что выигрыш в скорости к этому времени будет аннулирован). Кто-нибудь еще, кто сталкивался с подобными проблемами с безопасностью для своего веб-приложения и что вы в итоге сделали?

Пожалуйста, дайте знать, если что-то кажется расплывчатым; Я был бы рад предоставить более подробную информацию.

Ответы [ 3 ]

2 голосов
/ 05 августа 2010

Проблема с регулярными выражениями состоит в том, что фильтрация HTML является слишком сложной задачей, чтобы ее можно было легко или элегантно выполнить с регулярными выражениями без создания большого беспорядка.

Вам необходимо создать что-то, что действительно понимает HTML иможет работать с ним как с HTML и знать, как браузер собирается что-то интерпретировать.Регулярные выражения работают с ним, как будто это просто одна большая длинная строка.Они не очень хороши и не изящны при разборе HTML с сохранением состояния, например, распознавая, что текущее совпадение находится внутри комментария, или в атрибуте, или в элементе и т. Д. Просто эмулировать это в регулярных выражениях очень просто.

Другая проблема заключается в том, что «сопоставление общеизвестных инъекций XSS» намного сложнее, чем кажется.Если это не так, вы не делаете это правильно.Ваш фильтр должен знать HTML, он должен знать, какова действительная схема URL и как нулевые байты работают в разных частях HTML и т. Д. В основном, большинство инъекций в шпаргалке XSS, например, основаны на обходе фильтрациисделано с помощью регулярных выражений фильтров.

И еще одна вещь - то, что очиститель HTML поддерживается кем-то, кто знает, что они делают.Вы можете доверять этому, и вы можете верить, что если в нем есть новый недостаток, он будет исправлен.Это может сэкономить вам много работы, пытаясь сделать то же самое самостоятельно, и гарантировать, что вы будете в курсе всех различных патчей.

2 голосов
/ 05 августа 2010

Используете регулярное выражение для html / javascript?Возможно, вы не видели этот эпический ответ мистера Бобице .Короче говоря, если вы используете регулярное выражение, то у вас две проблемы .Фактически, причина, почему HTML Purifier такой медленный, заключается в том, что он использует сотни вызовов preg_match() и preg_repalce() для очистки сообщения.Вы никогда не должны заново изобретать Wheal, без сомнения, быть менее безопасным.

Реальный вопрос - htmlspeicalchars($var,ENT_QUOTES); против очистителя HTML.HTML Purifer не только медленный, он был взломан, много раз .Не используйте HTML Purifier, если нет другого выбора, htmlspeicalchars решает большинство проблем и решает его так, что его нельзя обойти.

1 голос
/ 05 августа 2010

Лучше быть в безопасности, чем потом сожалеть. Существует множество атак, которые ваши регулярные выражения могут не найти. Например, вот только несколько . Если очиститель HTML работает слишком медленно, посмотрите, поможет ли кэширование очищенного HTML.

...