【问题标题】:HTMLPurifier strips select tagsHTMLPurifier 去除选择标签
【发布时间】:2019-07-09 05:44:46
【问题描述】:

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

【问题讨论】:

  • 您是否查看过有关如何配置 HTMLPurifier 的用户文档?你有没有设置任何配置?你的配置是什么样的?
  • @GordonM 我试过 $config->set( 'HTML.AllowedElements', [ 'select', 'option' ] ),但它给出了一个错误:不支持元素'select'(对于有关实施此功能的信息,请参阅支持论坛)
  • 那么您可能想查看支持论坛!

标签: php htmlpurifier


【解决方案1】:

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

但是,HTML.Trusted 设置允许您启用表单,但这会完全启用它们。有关更改行为的一些讨论,请参阅the thread "Anyone have a config that allows form elements?" on the HTML Purifier discussion forum,例如:

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

默认情况下不是:您必须编写代码。

如何启用它?

可能最简单的做法是从HTMLPurifier/HTMLModule/Forms.php 复制粘贴定义,然后适当地调整它们。请注意,这些定义假定用户受信任,因此请仔细检查您允许的所有字段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    相关资源
    最近更新 更多