safe2()
ясно htmlspecialchars()
Вместо safe1()
вы действительно должны использовать HTMLPurifier
для очистки полных объектов HTML. Он удаляет нежелательные атрибуты, теги и, в частности, все, что связано с JavaScript. Да, это медленно, но оно охватывает все мелкие крайние случаи (даже для более старых версий IE), которые допускают безопасное повторное использование фрагмента HTML пользователя. Но проверьте http://htmlpurifier.org/comparison для альтернатив. - Если вы действительно хотите отображать только необработанный текст пользователя (без отфильтрованного html), тогда htmlspecialchars(strip_tags($src))
будет работать нормально.
safe3()
кричит регулярное выражение. Здесь вы действительно можете применить белый список к тому, что вы действительно хотите:
var a = "<?php echo preg_replace('/[^-\w\d .,]/', "", $xss)?>";
Конечно, вы можете использовать json_encode
здесь, чтобы получить совершенно правильный синтаксис и переменную JS. Но потом вы просто отложили возможность использования этой строки в своем коде JS, где вам придется присматривать за ней.
Это также безопасно во всех браузерах (особенно IE6)?
Если вы укажете кодировку явно, то IE не будет совершать чудовищное обнаружение контента, поэтому эксплойты UTF7 можно игнорировать.