htmlpurifier удаляет все форматирование, сделанное CKEDitor

Я использую CKEditor, чтобы пользователь мог оставлять свои комментарии. Я думал использовать htmlpurifier для защиты моего html. Но когда я попробовал это, он фактически удалил все форматирование, сделанное CKEditor. CKEditor сгенерировал следующий html

<div class="originalpost"><span style="color:#B22222;">
<em><u><strong><span style="font-size:250%;">
This is Pakistan</span></strong></u></em></span></div>

После очистки с помощью htmlpurifier html стал таким

<div class="&quot;originalpost&quot;"><span><em><u><strong>
<span>This is Pakistan</span></strong></u></em></span></div>

Он фактически удаляет все встроенные стили CSS, а также class="&quot;originalpost&quot;" не понимает. Я использовал следующий способ очистки html с помощью htmlpurifier.

require_once("path\HTMLPurifier.auto.php");
$config = HTMLPurifier_Config::createDefault();
$purifier = new HTMLPurifier($config);
$html = "xyzhtml";
$clean_html = $purifier->purify($html);

Я хочу сохранить форматирование пользователя. Как настроить htmlpurifier, чтобы форматирование пользователя также не меняло встроенный css.


person Munib    schedule 28.03.2013    source источник
comment
Существует ряд XSS-атак с использованием атрибута style. Вы уверены, что хотите его включить? Одна из целей HTMLPurifier — избавиться от них.   -  person Diego Agulló    schedule 28.03.2013
comment
@DiegoAgulló, как я могу сохранить пользовательское форматирование, не разрешая атрибут стиля, поскольку я использую CKEditor для публикации комментариев.   -  person Munib    schedule 28.03.2013


Ответы (2)


Он фактически удаляет все встроенные стили CSS.

Встроенные стили действительно опасны — в них можно внедрить JavaScript с помощью url(), хитрых expression() IE и поведенческих расширений, специфичных для браузера.

HTMLPurifier может анализировать встроенные стили и фильтровать опасные свойства и значения. Вы можете включить это, включив style в свой белый список атрибутов.

$config->set('HTML.AllowedAttributes', '*.style, ...');

style не включен в список атрибутов по умолчанию, потому что синтаксический анализ стилей представляет собой дополнительную сложность (с возможностью появления ошибок) и большинству приложений он не нужен.

Вы можете настроить разрешенные свойства с помощью %CSS.AllowedProperties, если хотите.

Я не могу воспроизвести проблему &quot;, но, безусловно, отключение опции PHP magic_quotes_gpc - это всесторонняя хорошая вещь...

person bobince    schedule 28.03.2013

Бьюсь об заклад, вам нужно отключить кавычки Sybase.

person Edward Z. Yang    schedule 28.03.2013