php - 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'
解决方案
<select>
并且<option>
是表单元素。由于表单可以使网络钓鱼变得微不足道,HTML Purifier 以其“默认安全”的心态,甚至不需要加载表单的 HTML 定义,因此您不能简单地通过(仅)设置启用表单HTML.AllowedElements
。
但是,该设置HTML.Trusted
允许您启用表单,但这会完全启用它们。有关更改行为的一些讨论,请参阅线程“有人有允许表单元素的配置吗?” 在 HTML Purifier 论坛上,例如:
表格只允许有一个空动作;他们总是服从自己。
默认情况下不是:您必须对其进行编码。
我将如何启用它?
可能最简单的做法是复制粘贴定义
HTMLPurifier/HTMLModule/Forms.php
,然后根据需要对其进行调整。请注意,这些定义假定用户受信任,因此请仔细检查您允许的所有字段。
推荐阅读
- android - 我们可以在不使用模型的情况下为列表视图创建搜索过滤器吗?
- f# - 如何在 af# 构造函数中声明类型别名?
- c++ - C++中私有静态成员变量的继承
- c# - 如何正确使用 ContentTemplateSelector 和 ContentControl?
- angular - Angular项目自己编译/刷新页面
- octave - 将文本文件导入为矩阵
- bluetooth - 蓝牙 3.0 和 BLE 有什么区别?
- python - 如何根据另一个布尔数组的列值删除 Pandas 数据框列?
- python - 在 Snakemake 中为 rule all 放置可选的输入文件
- python - 如何通过 Selenium Python 从 javascript 网页中抓取特定信息?