首页 > 解决方案 > HTMLPurifier 去除选择标签

问题描述

我正在使用 HTMLPurifier 来防止 xss。html 包含各种标签,例如 SELECT、OPTION。但是 HTMLPurifier 删除了 SELECT、OPTION 标签并保留了纯文本。如何允许 SELECT、OPTION 标签。

这是代码

$html = "<select>
       <option value="1" selected>Test 1</option>
       <option value="2" selected>Test 2</option>
</select>";

$config = \HTMLPurifier_Config::createDefault();
$config->set( 'AutoFormat.RemoveEmpty', true );
$purifier = new \HTMLPurifier( $config );
$cleanHtml = $purifier->purify( $dirtyHTML );

代码返回'Test 1Test 2'

标签: phphtmlpurifier

解决方案


<select>并且<option>是表单元素。由于表单可以使网络钓鱼变得微不足道,HTML Purifier 以其“默认安全”的心态,甚至不需要加载表单的 HTML 定义,因此您不能简单地通过(仅)设置启用表单HTML.AllowedElements

但是,该设置HTML.Trusted允许您启用表单,但这会完全启用它们。有关更改行为的一些讨论,请参阅线程“有人有允许表单元素的配置吗?” 在 HTML Purifier 论坛上,例如:

表格只允许有一个空动作;他们总是服从自己。

默认情况下不是:您必须对其进行编码。

我将如何启用它?

可能最简单的做法是复制粘贴定义HTMLPurifier/HTMLModule/Forms.php,然后根据需要对其进行调整。请注意,这些定义假定用户受信任,因此请仔细检查您允许的所有字段。


推荐阅读