Оболочка HTMLPurifier в Yii2 принимает второй аргумент :
echo HtmlPurifier::process($html, [
// options go here
]);
Для <embed>
вы должны иметь возможность использовать HTML.SafeEmbed :
echo HtmlPurifier::process($html, [
'HTML.SafeEmbed' => true,
]);
К сожалению, для <audio>
основная проблема здесь заключается в том, что очиститель HTML не поддерживает HTML5, что значительно усложнит добавление.
Существуют пользовательские патчи, позволяющие HTML Purifier понимать HTML5 , но, насколько мне известно, ни один из них не был проверен, и поэтому трудно сказать, что это будет делать для безопасности вашего сайта. , (Можно утверждать, что HTML Purifier с пользовательскими определениями HTML5 все же лучше, чем вообще без HTML Purifier.)
Я дал некоторые грубые инструкции о том, как заставить очиститель HTML (саму библиотеку, а не ее обертку Yii2) знать только о теге <audio>
над другим вопросом . Цитирование соответствующих частей:
Вам придется взглянуть на «Настроить!» документация для конечного пользователя , в которой рассказывается, как добавлять теги и атрибуты, о которых не знает HTML Purifier.
Цитировать наиболее яркий пример кода из связанной документации
(этот код рассказывает HTML-очистителю о теге <form>
):
Время для некоторого кода:
$config = HTMLPurifier_Config::createDefault();
$config->set('HTML.DefinitionID', 'enduser-customize.html tutorial');
$config->set('HTML.DefinitionRev', 1);
$config->set('Cache.DefinitionImpl', null); // remove this later!
$def = $config->getHTMLDefinition(true);
[...]
$form = $def->addElement(
'form', // name
'Block', // content set
'Flow', // allowed children
'Common', // attribute collection
array( // attributes
'action*' => 'URI',
'method' => 'Enum#get|post',
'name' => 'ID'
)
);
$form->excludes = array('form' => true);
Каждый из параметров соответствует одному из заданных нами вопросов. Обратите внимание, что мы добавили звездочку в конец атрибута действия к
указать, что это требуется. Если кто-то указывает форму без этого
атрибут, тег будет ось. Кроме того, дополнительная строка в конце
специальная дополнительная декларация, которая предотвращает вложение форм в
друг друга.
После того, как вы следовали этим инструкциям, чтобы сделать вашу процедуру очищения
известно о <audio>
, добавив тег <audio>
в вашу конфигурацию
белый список будет работать.
Итак, вкратце, если вы хотите иметь возможность очищать только <audio>
теги, не теряя их полностью, вам нужно будет немного изучить возможности тегов и добавить информацию в HTML Purifier.
Вы можете основывать свой код на том, что вы можете найти в HTML5Definition.php
файле *1048* xemlock / htmlpurifier-html5 *, если вы не хотите работать с ним с нуля.