请给我一个提示,为什么我的代码不容易受到 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>
但无济于事。
测试.txt:
This is just a test.
试过:
<test>This is just a test.</test>
没有结果。
有什么提示吗?
反映@Paul Crovella,这是一个编辑:
CP-ing 你的代码导致:
DOMDocument::loadXML(): I/O warning : failed to load external entity file:// full path to file name
DOMDocument::loadXML(): 无法处理 Entity 中的实体
DOMDocument::loadXML(): Entity 'ent' 未在 Entity 中定义