我正在使用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'
答案 0 :(得分:1)
<select>
和<option>
是表单元素。由于表单可以使网络钓鱼变得微不足道,因此具有“默认安全”心态的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
复制粘贴定义,然后根据需要进行调整。请注意,这些定义假定用户是受信任的用户,因此请仔细检查您允许的所有字段。