Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chrome扩展、内容脚本和XSS攻击_Javascript_Google Chrome_Google Chrome Extension_Xss - Fatal编程技术网

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
。我很清楚恶意用户会将邪恶的
元素放在纯文本中,并试图破坏我的扩展。这是我所关心的

我的问题:

  • 我的扩展将获取这些html数据,并将其粘贴到其他网站的内容可编辑元素(如gmail;使用
    innerHTML
    和内容脚本)中进行文本扩展。XSS也可能影响这些站点。我应该关注那些网站吗?嗯,他们有责任清理他们的内容
  • 我自己的扩展本身不与任何服务器通信,除了chrome sync存储服务器,它将以纯文本形式存储这些数据。但是,我仍然在
    options.html
    页面中以同样的方式使用
    innerHTML
    (提供交互式文本扩展)。XSS能否以任何方式影响我的扩展?据我所知,他们(黑客)将在他们自己的电脑上用自己的浏览器使用我的扩展名文件的副本。从这个意义上说,我无法辨别它们会造成什么伤害

  • 我希望了解chrome扩展和XSS工作原理的人能给我们一些启示。如果我遗漏了任何细节/不清楚,一定要让我知道


    更新:我刚刚意识到脚本元素不是通过innerHTML执行的,只有内联事件处理程序才是。我知道使用CSP有助于防止在扩展内部执行内联事件处理程序。但是对于我的扩展将粘贴代码的其他网站呢。它们也不会执行内联事件处理程序js函数吗?

    在扩展中不小心使用
    innerHTML
    会导致几个(安全)问题,包括:

    • 同源旁路(包括通用XSS,又称UXSS)
    • 特权升级
    • 隐私侵犯(例如,推荐人泄露)
    您建议使用innerHTML(从不受信任的来源获取HTML并将其插入另一个站点上的contentEditable元素而不进行清理)是不安全的。理论上,脚本不应在contentEditable元素中执行,但在实际情况并非如此的情况下,存在浏览器错误(例如和)。
    对于记录-将不受信任的内容分配给
    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或需要它