HTMLPurifier 去除 select 个标签

HTMLPurifier strips select tags

我正在使用 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 );

代码return'Test 1Test 2'

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

但是,设置HTML.Trusted lets you enable forms, but that enables them altogether. For some discussion on altering the behaviour, see the thread "Anyone have a config that allows form elements?" on the HTML Purifier discussion forum,例如:

The forms would only be allowed to have an empty action; they always submit to themselves.

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

How would I enable it?

可能最简单的事情是 copy-paste 来自 HTMLPurifier/HTMLModule/Forms.php 的定义,然后适当地调整它们。请注意,这些定义假设用户是受信任的,因此请仔细检查您允许的所有字段。