DOM和删除标签对抗xss攻击方式来优化它?

时间:2011-08-26 09:51:50

标签: php dom tags detection xss

我的一位朋友发布了一个关于如何使用DOM防止xss攻击的代码。

您对此代码有何看法? 我们可以优化吗?

<?php
    function parseDoc(DOMDocument $codeHtml){
      $forbiddenTag=array('script');
      $forbiddenAttr=array('onmouseover','onmouseup','onclick');
      foreach($forbiddenTag as $tag){
        $liste=$codeHtml->getElementsByTagName($tag);
        foreach($liste as $element){
          $codeHtml->removeChild($element);
        }
      }
      stripAttr($codeHtml,$forbiddenAttr);
    }

    function stripAttr(DOMNode $root, array $forbiddenAttr){
     foreach($rootl->childNodes as $child){
        foreach($forbiddenAttr as $attr){
          if($child->hasAttribute($attr)) $child->removeAttribute($attr);

        }.
        if($child->hasChildNodes())strippAttr($child,$forbiddenAttr);
      }
    }

1 个答案:

答案 0 :(得分:2)

这不是打击XSS的正确方法。

你正在使用黑名单,它永远无法捕捉到包含脚本的所有方法。例如,您没有抓住onload属性或javascript:链接。相反,始终使用DOM方法来构造文本节点和属性值,默认情况下您将是安全的。如果您希望用户允许格式化文本,请使用允许的元素,属性和属性值的白名单