Javascript Chrome扩展、内容脚本和XSS攻击
我听说当一个网站允许像Javascript Chrome扩展、内容脚本和XSS攻击,javascript,google-chrome,google-chrome-extension,xss,Javascript,Google Chrome,Google Chrome Extension,Xss,我听说当一个网站允许像evalJS这样的东西时,会发生危险的XSS攻击。我计划为我的文本扩展器扩展做一些类似的事情(键入一些文本->按热键->文本扩展) 我将允许用户粘贴一个纯html字符串文本,然后以良好的格式查看它。它用于粗体、下划线等。为此,我将在div中使用.innerHTML。我很清楚恶意用户会将邪恶的元素放在纯文本中,并试图破坏我的扩展。这是我所关心的 我的问题: 我的扩展将获取这些html数据,并将其粘贴到其他网站的内容可编辑元素(如gmail;使用innerHTML和内容脚本)中
eval
JS这样的东西时,会发生危险的XSS攻击。我计划为我的文本扩展器扩展做一些类似的事情(键入一些文本->按热键->文本扩展)
我将允许用户粘贴一个纯html字符串文本,然后以良好的格式查看它。它用于粗体、下划线等。为此,我将在div
中使用.innerHTML
。我很清楚恶意用户会将邪恶的
元素放在纯文本中,并试图破坏我的扩展。这是我所关心的
我的问题:
innerHTML
和内容脚本)中进行文本扩展。XSS也可能影响这些站点。我应该关注那些网站吗?嗯,他们有责任清理他们的内容options.html
页面中以同样的方式使用innerHTML
(提供交互式文本扩展)。XSS能否以任何方式影响我的扩展?据我所知,他们(黑客)将在他们自己的电脑上用自己的浏览器使用我的扩展名文件的副本。从这个意义上说,我无法辨别它们会造成什么伤害我希望了解chrome扩展和XSS工作原理的人能给我们一些启示。如果我遗漏了任何细节/不清楚,一定要让我知道
更新:我刚刚意识到脚本元素不是通过innerHTML执行的,只有内联事件处理程序才是。我知道使用CSP有助于防止在扩展内部执行内联事件处理程序。但是对于我的扩展将粘贴代码的其他网站呢。它们也不会执行内联事件处理程序js函数吗?在扩展中不小心使用
innerHTML
会导致几个(安全)问题,包括:
- 同源旁路(包括通用XSS,又称UXSS)
- 特权升级
- 隐私侵犯(例如,推荐人泄露)
对于记录-将不受信任的内容分配给
innerHTML
是不安全的,除非文档与视图无关(例如,可以使用或创建此类无视图文档)。请注意,尽管在此类文档中分配innerHTML
是安全的,但在具有视图的文档中插入此类文档中的元素是完全不安全的。有关XSS的一般信息,请参阅
当不受信任的内容设法在扩展的上下文中执行时,可能会发生权限提升。在内容脚本中,这仅限于跨源网络请求和一些其他扩展API,在扩展页面中,这包括对扩展具有权限的所有扩展API的访问。这将产生深远的影响,XSS在扩展中并不少见。因此。这大大降低了XSS在扩展中的影响,但它并非100%完美无瑕,您不应该以CSP为借口,不正确清理分配给innerHTML
的数据
(一旦尘埃落定,我可以与CSP旁路分享一些有影响的真实世界安全事件)
对于您的特定情况(将DOM树复制到另一个文档中的contentEditable元素),我建议使用以下方法之一:
- 白名单:递归枚举一个元素的所有子节点,如果该元素是安全元素(例如“b”、“strong”、“em”、“i”等),则仅克隆该元素,如果该元素是安全属性,则仅复制该属性
- 黑名单:深度克隆子树,删除所有不安全元素和不安全属性(读者练习:什么是不安全元素?提示:答案不容易,取决于属性)
如果您没有DOM树,请使用前面建议的方法之一(例如)解析HTML。在选择要接受的元素和属性时要小心。例如,这似乎是一个好的开始(因为它删除了脚本标记和除某些看似安全的属性之外的所有属性),但事实并非如此。有人可以使用
style
属性使元素透明并位于整个文档的顶部,然后在href
属性中放置javascript:
链接(链接前面的空格由浏览器删除)。当用户单击页面中的任何位置时,脚本将在页面的上下文中运行。修复了该问题,结果可能对XSS安全(但对隐私侵犯不安全,例如,可以通过样式
属性中的CSS引用外部内容)。@wOxxOm感谢您的输入!但是MDN页面清楚地显示const name=“”;el.innerHTML=name;//显示警报
可能是邪恶的。我想这就是我所关心的。我会更新我的问题。@wOxxOm谢谢!很抱歉重复我的问题,但也许我无法理解第二件事。“但在扩展页上不起作用”我明白这一点。但是,对于我在gmail等不同网站上使用内容脚本插入的html,它也不起作用吗?从技术上讲,gmail并不是一个扩展页面:/嗯,安全敏感网站应该使用CSP,完全禁止内联js或需要它