我在数据库中有我想要输出的文件的路径。喜欢:
<audio src="/yii2-biblioteca/frontend/web/uploads/audio/lya1.mp3" controls type="audio/mpeg">
我正在使用:
<?=HtmlPurifier::process($model->audio)?>
输出。
我对图像使用相同的东西,它没关系,它的工作原理,但对于音频和pdf嵌入不是那么多。在pdf开始工作的时候,我用js功能改变了一些东西,并不是产生负面影响的支持。当它好的时候我把所有的东西都逆转了,但它现在还没有用。
pdf例子:<embed src="/yii2-biblioteca/frontend/web/uploads/pdf/dying.pdf" type="application/pdf" width="100%" height="100%" />
Yii2的HTMLPurifier包装器需要a second argument:
echo HtmlPurifier::process($html, [
// options go here
]);
对于<embed>
,您应该能够使用HTML.SafeEmbed设置:
echo HtmlPurifier::process($html, [
'HTML.SafeEmbed' => true,
]);
不幸的是,对于<audio>
,这里的根本问题是HTML Purifier不支持HTML5,这将使得添加更加复杂。
有user-supplied patches to allow HTML Purifier to understand HTML5,但据我所知,没有人接受过审核,因此很难说这将对您网站的安全性做些什么。 (可以说,使用userland提供的HTML5定义的HTML Purifier仍然比没有HTML Purifier更好。)
我已经给出了一些关于如何制作HTML Purifier(库本身,而不是它的Yii2包装器)的粗略指示,只知道<audio>
上的another question标签。引用相关部分:
您将不得不查看"Customize!" end-user documentation,它将告诉您如何添加HTML Purifier不知道的标记和属性。
引用链接文档中最生动的代码示例(此代码教授HTML Purifier关于
<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);
每个参数对应于我们提出的问题之一。请注意,我们在action属性的末尾添加了一个星号,表示它是必需的。如果有人指定没有该属性的表单,则该标记将被删除。此外,最后的额外行是一个特殊的额外声明,可以防止表单彼此嵌套。
一旦您按照这些说明使您的净化程序知道
<audio>
,将标签<audio>
添加到您的配置白名单将会起作用。
因此,简而言之,如果您希望能够纯化<audio>
标签而不会完全丢失它们,那么您将不得不对标签的功能进行一些研究并将信息添加到HTML Purifier中。
如果您不想从头开始处理,可以将代码基于xemlock/htmlpurifier-html5's HTML5Definition.php
file中的代码。