Что делать с escape-символами ASCII в пользовательской разметке?
Я использую HTML Purifier, PHP-фильтр, "защищающий от XSS и обеспечивающий совместимый со стандартами вывод", для очистки / стандартизации введенной пользователем разметки.
Это пример введенной пользователем разметки:
<font face="'Times New Roman', Times">TEST</font>
который генерирует:
<span style="font-family:"Times New Roman", Times;">TEST</span>
Я немного смущен, потому что "
даже не escape-символ за одну цитату. Какова лучшая практика здесь, так как я собираюсь использовать этот пользовательский контент позже?
- Оставить как есть
- Заменить все
"
с\'
после выполнения очистителя - Настройте очиститель HTML по- другому
- Что-то другое?
2 ответа
Выглядит хорошо для меня.
Я думаю, что преобразование из одинарных в двойные кавычки происходит из-за того, что очиститель HTML разбирает весь тег и собирает его обратно в соответствии со своими собственными правилами, в которых используются двойные кавычки при цитировании содержимого внутри style
приписывать.
Это также подтверждает, хорошо для меня. Какой тип документа вы проверяете?
Если я не пропускаю что-то, я бы сказал, что это хорошо, чтобы использовать как есть.
Вывод XHTML-действителен, но преобразование сущности неверно. <img src="/test" alt="I'm ok"/>
будет преобразован в <img src="/test" alt="I"m ok">
Простого будет достаточно:
$allowed_tags='<font>';
echo htmlspecialchars(strip_tags(rawurldecode($input),$allowed_tags),ENT_COMPAT,'UTF-8');
но он не преобразует тег в .