0

私のコードが 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' がエンティティで定義されていません

4

1 に答える 1