Intermittent simplexml_load_file(): I/O warning on local Joomla site Ask Question
libxml_disable_entity_loader(false)
将不适用。下面显示了启用全系统实体加载器的潜在弱点:
<!DOCTYPE scan [<!ENTITY test SYSTEM
"php://filter/read=convert.base64-encode/resource=/etc/passwd">]>
<scan>&test;</scan>
这里解释了缺少线程安全性的问题。虽然可以注册自己的实体加载器libxml_set_external_entity_loader
,或使用锁来保护呼叫libxml_disable_entity_loader
,但这些解决方案似乎有点令人费解。
好消息是外部实体的问题只影响处理文件的功能(例如simplexml_load_file
,DOMDocument::schemaValidate
等等)。这使得解决方案简单直接。首先将文件内容加载为字符串,然后执行相应的libxml面向字符串的函数。
simplexml_load_string(file_get_contents($xml));
和/或
$xml = new DOMDocument('1.0', 'UTF8');
$xml->loadXML(file_get_contents($xmlFile));
$xml->schemaValidateSource(file_get_contents($xsdFile));
希望它有助于某人。
FIGHTING---EVEREY BODY