2011-08-26 2 views
1

내 친구가 DOM을 사용하여 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); 
     } 
    } 

답변

2

이것은 올바른 XSS 퇴치 방법이 아닙니다.

당신은 영원히 스크립트를 포함하는 모든 방법을 포착하지 못하는 블랙리스트를 사용하고 있습니다. 예를 들어 onload 속성이나 javascript: 링크를 찾지 못했습니다. 대신 DOM 메소드를 사용하여 텍스트 노드와 속성 값을 구성하면 기본적으로 안전합니다. 사용자가 서식있는 텍스트를 허용하게하려면 허용 된 요소, 속성 및 속성 값의 허용 목록을 사용하십시오.

+0

Dom_event()를 사용할 수 있습니까? – Zeroth

+0

@ Zeroth 나는 그 이름으로 어떤 PHP 함수를 모른다. 그것에 대한 링크를 제공 할 수 있습니까? – phihag

+0

죄송합니다. 여기 늦어서 잘 생각하지 못했습니다. http://en.wikipedia.org/wiki/DOM_Events – Zeroth

관련 문제