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_fileDOMDocument::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));

希望它有助于某人。

posted @ 2018-01-05 17:25  Vitascope  阅读(160)  评论(0编辑  收藏  举报