HTMLPurifier剥离选择标签

时间:2019-07-08 08:37:59

标签: 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'

1 个答案:

答案 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复制粘贴定义,然后根据需要进行调整。请注意,这些定义假定用户是受信任的用户,因此请仔细检查您允许的所有字段。