将表单输入直接加载到DOMDocument类中是否可以?

时间:2013-01-28 23:10:04

标签: php domdocument input-sanitization

我构建了一个采用任意HTML的工具,收集所有类和ID并将它们输出回页面。我担心安全问题。我一直在使用HTML Purifier来过滤输入,但我需要支持HTML5,HTML Purifier不支持HTML5。

这是该工具的要点:

$html=$_POST['html'];
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXpath($doc);
$elements = $xpath->query("//body");

foreach ($elements as $element) { 
    $nodes = $element->childNodes;     
    $output=write_selectors($nodes);
}

function write_selectors($nodes){
    foreach($nodes as $node){
        $node->getAttribute('id');
        .
        .
        .
        $node->getAttribute('class');
        .
        .
        .
    }
    .
    .
    .   
    return 'string containing all classes and ids in the document' 
}
.
.
.
echo htmlentities($output, ENT_QUOTES); 

我的问题是:

似乎有人可以将这样的字符串放入工具中:'<div '); do_bad_stuff( 'ha_ha_ha'$doc->loadHTML($html);最终会说$doc->loadHTML('<div '); do_bad_stuff( 'ha_ha_ha');

当我尝试输入有趣的业务时,DOMDocument似乎只是错误,但是我应该做些什么来防止恶意输入?如果没有,为什么不呢?

其次,是否有足够的能力消毒产量?

1 个答案:

答案 0 :(得分:0)

  1. 不,它永远不会那样做。你在变量中有$ html并将该变量直接发送到函数中。

  2. 是的,我个人会使用htmlspecialchars,但是htmlentities可以保护您免受XSS攻击。