DOM и убрать тэг снова против атаки через xss способ ее оптимизации? - PullRequest
1 голос
/ 26 августа 2011

Мой друг опубликовал код о том, как предотвратить xss-атаку с использованием DOM.

Что вы думаете об этом коде?Можем ли мы оптимизировать это?

<?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 Ответ

2 голосов
/ 26 августа 2011

Это не правильный способ борьбы с XSS.

Вы используете черный список, который навсегда не сможет отловить все способы включения сценариев.Например, вы не перехватываете атрибут onload или ссылки javascript:.Вместо этого всегда используйте методы DOM для создания текстовых узлов и значений атрибутов, и вы будете в безопасности по умолчанию.Если вы хотите, чтобы пользователи разрешали форматированный текст, используйте белый список разрешенных элементов, атрибутов и значений атрибутов.

...