来自数据库yii2的输出问题

问题描述 投票:0回答:1

我在数据库中有我想要输出的文件的路径。喜欢:

<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%" />

database yii2 htmlpurifier
1个回答
1
投票

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中的代码。

© www.soinside.com 2019 - 2024. All rights reserved.