Что делать с escape-символами ASCII в пользовательской разметке?

Я использую HTML Purifier, PHP-фильтр, "защищающий от XSS и обеспечивающий совместимый со стандартами вывод", для очистки / стандартизации введенной пользователем разметки.

Это пример введенной пользователем разметки:

<font face="'Times New Roman', Times">TEST</font>

который генерирует:

<span style="font-family:&quot;Times New Roman&quot;, Times;">TEST</span>

Я немного смущен, потому что &quot даже не escape-символ за одну цитату. Какова лучшая практика здесь, так как я собираюсь использовать этот пользовательский контент позже?

2 ответа

Решение

Выглядит хорошо для меня.

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

Это также подтверждает, хорошо для меня. Какой тип документа вы проверяете?

Если я не пропускаю что-то, я бы сказал, что это хорошо, чтобы использовать как есть.

Вывод XHTML-действителен, но преобразование сущности неверно. <img src="/test" alt="I'm ok"/> будет преобразован в <img src="/test" alt="I&quot;m ok">

Простого будет достаточно:

$allowed_tags='<font>';
echo htmlspecialchars(strip_tags(rawurldecode($input),$allowed_tags),ENT_COMPAT,'UTF-8');

но он не преобразует тег в .

Другие вопросы по тегам