Что делать с escape-символами ASCII в пользовательской разметке? - PullRequest
2 голосов
/ 05 сентября 2010

Я использую 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 ]

2 голосов
/ 05 сентября 2010

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

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

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

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

1 голос
/ 05 сентября 2010

Вывод 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');

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

...