进行此跟进似乎比尝试将我的进度硬塞到上一个问题中更容易。我认为最好让该查询的正确答案看起来正确简单。
我现在已经将我的示例演变为以下内容:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p id="xmlOut"></p>
<script type="application/javascript">
var xml = `
<!DOCTYPE foo [
<!ELEMENT foo ANY>
<!ENTITY xxe SYSTEM "file:///etc/passwd">
<!ENTITY bar "test that entity substitution works in general">
]>
<foo>
display some text | &bar; | &xxe;
</foo>
`;
parser = new DOMParser();
xmlDoc = parser.parseFromString(xml, "text/xml");
document.getElementById("xmlOut").innerHTML = xmlDoc.getElementsByTagName("foo")[0].childNodes[0].nodeValue;
</script>
</body>
</html>
在这里,我将 XML 作为字符串写入并使用 DOM 解析器对其进行解析。一切都按预期工作,除了 xxe 实体没有被任何东西填充。正如最后一个问题的回答者所说,firefox 似乎有可能阻止外部实体......东西。我还尝试在我的主目录中替换一个文本文件,但这也不起作用。我也尝试给出不带file://
前缀的路径。到目前为止没有任何效果。
我可以确认 DTD 正在被解析和使用,所以这是向前迈出的一大步。
任何提示表示赞赏~!