私のコードが XXE に対して脆弱ではない理由を教えてください。
コード:
$text = $_POST['textarea'];
$doc= new DOMDocument();
$doc->loadXML($text);
echo $doc->textContent;
テストケース 1:
<justsomexmltag>Hello world</justsomexmltag>
結果 1:
Hello world
ここまでは順調ですね。ただし、XML コードを挿入してローカル ファイルのコンテンツを取得しようとすると、次のようになります。
<?xml version="1.0"?>
<!DOCTYPE log [
<!ENTITY ent SYSTEM "test.txt">
]>
<log><text>&ent;</text></log>
その後、何も印刷されません。「test.txt」は、私が攻撃を行ったphpファイルと同じレベルのファイル構造です。私が試してみました
<!ENTITY ent SYSTEM file:///"test.txt">
としても
<!ENTITY ent SYSTEM file:///full path to the file>
しかし、役に立たない。
test.txt:
This is just a test.
試しました:
<test>This is just a test.</test>
結果がありません。
ヒントはありますか?
@Paul Crovellaを反映して、ここに編集があります:
コードを CP 化すると、次の結果が得られました。
DOMDocument::loadXML(): I/O 警告: 外部エンティティ file:// のロードに失敗しました ファイル名へのフルパス
DOMDocument::loadXML(): エンティティ内のエンティティ ent の処理に失敗しました
DOMDocument::loadXML(): エンティティ 'ent' がエンティティで定義されていません