分析具有内联事件处理程序的HTML

Parse HTML which has inline event handler

本文关键字:事件处理 程序 HTML      更新时间:2024-04-12

我正在构建一个chrome扩展,其中我需要从网页中获取和解析一些html。为此决定使用jquery。

$(htmlString).find(".some-table");

问题是我在运行此代码时收到以下警告。

拒绝执行内联事件处理程序,因为它违反了以下内容安全策略指令:"script src'self'chrome扩展资源:"。启用内联执行需要"unsafe-inline"关键字、哈希("sa256-…")或nonce("once-…")。

"htmlString"似乎包含一些内联事件处理程序,在解析它时,chrome抛出了这个警告
我无法控制"htmlString"中的内容,只需要从中检索一些信息。有更好的方法吗?

使用显式$.parseHTML()。引用文档:

大多数接受HTML字符串的jQueryAPI都会运行HTML中包含的脚本。除非keepScripts明确为true,否则jQuery.parseHTML不会在解析的HTML中运行脚本。

然而,即使这样做也不安全。

然而,在大多数环境中仍然可以间接执行脚本,例如通过<img onerror>属性。调用方应该意识到这一点,并通过清除或转义URL或cookie等来源的任何不受信任的输入来防范。

因此,虽然它可能有助于特定的输入,但您应该考虑这样显式创建DOM节点是否是您真正需要的。它可能会造成各种令人讨厌的边缘案件。