有人可以通过这种方法将一些恶意代码注入我的脚本吗?如果有人可以,最好的做法是什么?
我正在尝试创建一种类似于 reddit 的建议标题的方式。
真正简短的答案是YES。一般而言,HTML 的任何“外部”加载都是不安全的——事实上,任何来自用户的任何数据的加载都可能是不安全的——所有用户提供的数据都必须经过验证和审查。
但是,根据您提供的信息,实际上不可能给出明确的答案。这是因为它取决于哪个文件、文件如何控制、文件加载后如何处理。
添加此信息,也许我可以给出更好的答案。
我假设当您询问该函数/方法的安全性时,您正在谈论注入一些将在服务器上执行的代码而不是XSS
.
我不是C
/C++
专家,但是查看作为背后方法dom_load_html()
的源代码loadHTMLFile()
,我可以看到它遵循结构良好的逻辑,并且除了在遇到问题时安全失败之外,流程也得到了很好的控制。
同样,我是新手,您可能需要一些专家C
/ C++
,以上只是我的个人意见。
这至少存在一个安全问题: https ://www.mediawiki.org/wiki/XML_External_Entity_Processing
上面的页面说 XML 标准定义了一种指定外部实体的方法,该实体可以指定从 URL 加载数据。它也可以从本地资源加载数据。
PHP 的 xml 库使用 libxml2,它默认实现该行为。有一种方法可以禁用它,但这也会禁用库的其他一些功能。最好的方法是对方法 loadXML() 和 loadHTML() 禁用它:
$dom = new DOMDocument();
$oldValue = libxml_disable_entity_loader( true );
$dom->loadXML( $xml );
libxml_disable_entity_loader( $oldValue );