【发布时间】:2016-12-09 22:23:53
【问题描述】:
我们的 Firefox 插件在后端向 Google 发出查询 (main.js),然后通过 xpath 提取一些内容。为此,我们使用innerHTML 创建一个document 实例用于xpath 解析。但是当我们将此插件提交给 Mozilla 时,我们被拒绝了,因为:
此插件通过分配给 innerHTML、jQuery.html 或通过类似方式,从包含可能未经处理的数据的 HTML 字符串创建 DOM 节点。除了效率低下,这是一个主要的安全风险。欲了解更多信息,请参阅https://developer.mozilla.org/en/XUL_School/DOM_Building_and_HTML_Insertion
按照提供的链接,我们尝试将innerHTML 替换为nsIParserUtils.parseFragment()。但是,示例代码:
let { Cc, Ci } = require("chrome");
function parseHTML(doc, html, allowStyle, baseURI, isXML) {
let PARSER_UTILS = "@mozilla.org/parserutils;1";
...
Cc, Ci 实用程序只能用于main.js,而该函数需要document (doc) 作为参数。 但我们找不到任何关于在main.js 中创建document 的示例,我们无法在其中使用document.implementation.createHTMLDocument("");。因为main.js是后台脚本,没有引用全局内置的document。
我搜索了很多,但仍然找不到任何解决方案。有人可以帮忙吗?
【问题讨论】:
-
您的主脚本可以访问多个
<document>元素。您选择哪个很大程度上取决于您希望该文档存在的名称空间(XUL 或 HTML,以及其他可能性),或者您需要<document>的目的。一个附带问题是<document>中没有内置“全局”;有很多<document>元素(每个选项卡至少一个以上+其他)。 This answer 的代码将获得对当前浏览器窗口的 a<window>和 a<document>的引用。
标签: security firefox firefox-addon firefox-addon-sdk innerhtml