代码之家  ›  专栏  ›  技术社区  ›  Andreas Bonini

除去标记的php函数,除了白名单中的标记和属性列表

  •  3
  • Andreas Bonini  · 技术社区  · 14 年前

    我必须从用户输入中去掉所有HTML标记和属性,除了那些被认为是“安全”的(即白名单方法)。

    strip_tags() 删除除在 $allowable_tags 参数。但我还需要能够删除所有未白名单中的属性;例如,我希望允许 <b> 标签,但我不想允许 onclick 原因显而易见。

    这有什么作用吗,还是我要自己做?

    2 回复  |  直到 12 年前
        1
  •  13
  •   Wrikken    14 年前

    据我所知, strip_tags 解决方案是消除不需要的标签的最快方法,并且除了第三方软件包,在domdocument中检查允许的属性非常容易,

    $string = strip_tags($string,'<b>');
    $dom = new DOMDocument();
    $dom->loadHTML($string);
    $allowed_attributes = array('id');
    foreach($dom->getElementsByTagName('*') as $node){
        for($i = $node->attributes->length -1; $i >= 0; $i--){
            $attribute = $node->attributes->item($i);
            if(!in_array($attribute->name,$allowed_attributes)) $node->removeAttributeNode($attribute);
        }
    }
    var_dump($dom->saveHTML());
    
        2
  •  -1
  •   Andreas    14 年前

    它没有任何功能,因此您可能需要编写一个函数。也许,正则表达式可以做到这一点。