我正在使用HTMLPurifier来防止xss。html包含所有类型的标记,例如SELECT,选项。但是HTMLPurifier删除SELECT、选项标记并保留纯文本。如何允许选择,选项标签。
这是代码
$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 );代码返回“测试1测试2”
发布于 2019-07-08 21:44:46
<select>和<option>是表单元素。由于表单可以使钓鱼变得琐碎,所以HTML净化器以其“默认安全”的心态,甚至不费心地加载表单的HTML定义,所以您不能仅仅通过(仅)设置HTML.AllowedElements来启用表单。
但是,设置HTML.Trusted允许您启用表单,但可以完全启用它们。关于改变行为的一些讨论,见线程“任何人都有允许表单元素的配置吗?”HTML净化器论坛,例如:
表单只允许有一个空的操作;它们总是提交给自己。在默认情况下不是这样:您必须对其进行编码。 我将如何启用它?可能最简单的方法就是复制粘贴
HTMLPurifier/HTMLModule/Forms.php中的定义,然后根据需要对它们进行调整。请注意,这些定义假定用户是受信任的,因此请仔细检查所有允许的字段。
https://stackoverflow.com/questions/56931159
复制相似问题