с HTMLpurifier, как добавить пару атрибутов в белый список по умолчанию, например. 'по щелчку'

Два вопроса:

Я читал документы и сообщения SO ... и знаю, как это сделать (определяя каждый элемент и атрибут самостоятельно), но все, что я хочу сделать, это добавить 2 или 3 атрибута в белый список по умолчанию ... так что Мне не нужно постоянно находить и добавлять дополнительные элементы/атрибуты, например, HTML.AllowedElements и/или HTML.AllowedAttributes.

В частности, теперь (для внутренних доверенных пользователей) мне нужно разрешить атрибуты javascript (ввод от tinymce). Вопрос № 1.) Есть ли способ просто добавить атрибут (к тому, что позволяет HTMLpurifier), не вызывая полного удаления всех наборов разрешенных элементов/атрибутов по умолчанию (перезаписывая ТОЛЬКО то, что явно написано в HTML.AllowedElements или HTML.AllowedAttributes)?

Что мне нужно прямо сейчас (атрибуты javascript), я был взволнован, когда увидел в этой ветке:

Формы белого списка в конфигурации HTML Purifier

...где Эдвард З. Ян говорит: "... [$config->set('HTML.Trusted', true);] разрешает JavaScript".

... но даже после установки этого: $config->set('HTML.Trusted', true); HTMLpurifier 4.4.0 все еще удаляет, например. любой входной атрибут onclick="dostuff();". Почему? Вопрос № 2.) Есть ли быстрый способ добавить только атрибуты javascript в список разрешенных?


person govinda    schedule 02.05.2012    source источник


Ответы (2)


  1. Вы теряете onclick, потому что очиститель HTML не знает об этом атрибуте, и если очиститель HTML пропустил все, когда вы включили %HTML. Trusted, вы могли бы просто не использовать очиститель HTML вообще.

  2. HTML Purifier имеет коллекции атрибутов именно для этого случая; «Общий», вероятно, является правильным для их вставки.

Но почему? Настоящее имя %HTML.Trusted действительно должно быть %HTML.UnsafeMakeMyApplicationVulnerable.

person Edward Z. Yang    schedule 02.05.2012
comment
Я понимаю, что атрибуты javascript небезопасны. Мне нужно разрешить их для нескольких доверенных пользователей. Зачем использовать очиститель HTML? ... потому что я хочу настроить. он строг для ненадежных пользователей, в то же время ослабляя его для доверенных пользователей... но при этом я и они (все мы) четко осведомлены о том, конкретно что мы разрешаем и когда. Я хочу осознанно сделать каждое исключение из блокировки, которая является очистителем HTML по умолчанию, в каждом конкретном случае, чтобы администратор в середине мог отслеживать детали ответственности, если это необходимо . Мне придется задать свои вопросы в другом комментарии. - person govinda; 02.05.2012
comment
хорошо, я так понимаю: (пожалуйста, поправьте меня, где я ошибаюсь): * несмотря на темы, которые предполагают, что $config->set('HTML.Trusted', true) позволит проходить атрибутам javascript, на сегодняшний день это не соответствует действительности. * Разумно предположить, что в будущем вы можете добавить атрибуты javascript в коллекцию атрибутов %HTML.Trusted. * чтобы разрешить атрибуты javascript, сегодня единственный способ - следовать указаниям, откуда, здесь? - htmlpurifier.org/docs/enduser-customize.html ? («коллекции атрибутов», кажется, нужно немного покопаться, чтобы найти, не говоря уже о том, чтобы обернуть голову вокруг.) - person govinda; 02.05.2012
comment
Да, все это кажется по существу точным. Соответствующий файл — library/HTMLPurifier/HTMLModule/CommonAttributes.php, к сожалению, по нему нет явной документации. - person Edward Z. Yang; 02.05.2012
comment
Кроме того, я хотел понять - как только я использую %HTML.AllowedAttributes, это вынуждает меня затем иметь определение каждого атрибута, который я хочу разрешить? Это правильно? Можете ли вы указать мне, где находится этот список по умолчанию (атрибуты и элементы), чтобы я мог работать с ними, а не открывать их поэтапно/по частям? - person govinda; 02.05.2012
comment
да. Смысл в том, чтобы заставить вас тщательно подумать о том, почему вы хотите перегрузить белый список по умолчанию, который уже был очень тщательно проверен и должен работать для большинства пользователей, если только вы не хотите кардинально изменить внешний вид своего белого списка. Посетите htmlpurifier.org/live/smoketests/printDefinition.php для получения точной информации о конфигурации. . Ознакомьтесь также с директивами Forbidden. - person Edward Z. Yang; 02.05.2012

HTMLPurifier не поддерживает onClick и аналогичные атрибуты, связанные с java-скриптом, для любого элемента HTML в качестве поведения по умолчанию. Поэтому, если вы хотите каким-либо образом разрешить такой атрибут, вы можете добавить такой атрибут к конкретному элементу следующим образом.

$config = HTMLPurifier_Config::createDefault();
$def = $config->maybeGetRawHTMLDefinition()
$def->addAttribute('a', 'onclick', 'Text');

Но будьте осторожны, это может привести к атаке xss, поскольку вы позволяете любому коду java-скрипта находиться в этом атрибуте.

person anna    schedule 10.05.2017
comment
Спасибо за этот фрагмент кода, который может оказать немедленную помощь. Надлежащее объяснение значительно повысило бы его образовательную ценность, показав, почему это хорошее решение проблемы, и сделать его более полезным для будущих читателей с похожими, но не идентичными вопросами. Пожалуйста, отредактируйте свой ответ, чтобы добавить объяснение и указать, какие ограничения и предположения применяются. - person Toby Speight; 10.05.2017