0

任意の HTML を受け取り、すべてのクラスと ID を収集してページに出力するツールを作成しました。セキュリティが心配です。HTML Purifier を使用して入力をフィルタリングしていましたが、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 だけのエラーのように思えますが、悪意のある入力から保護するために何かをする必要がありますか? そうでない場合、なぜですか?

第二に、htmlentities は出力をサニタイズするのに十分ですか?

4

1 に答える 1

0
  1. いいえ、それは決してしません。変数に $html があり、その変数を関数に直接送信しました。

  2. はい、個人的には htmlspecialchars を使用しますが、XSS から保護するには htmlentities で問題ありません。

于 2013-01-28T23:42:40.643 に答える