Chrome.extension.getURL 和 Chrome 插件中的 AJAX 安全问题

3

我正在开发一个扩展程序,它会在页面中注入脚本。

这个扩展程序基本上是一个内容脚本,它会将另一个脚本注入到DOM中。(为什么不只用内容脚本呢?

我的代码没有任何问题,它可以正常工作。这里的主要目的是了解 Web 开发中的安全问题。

被注入的脚本是我的扩展程序中的源文件,我使用 JQuery.get 从地址 chrome.extension.getURL('myscript.js') 获取它。

有什么安全问题需要注意吗?

该页面不是https,这个get方法会返回与我的脚本不同的东西吗?

我还使用相同的方法插入 HTML 内容。HTML 文件来自于我的扩展程序,就像脚本一样。是否存在中间人篡改响应文本的可能性?

如果存在这样的安全问题,有什么常见的做法可以避免它们?

另外,如果我创建一个脚本(document.createElement('script'))并将其源设置为我的文件。当我将这个脚本注入到 DOM 中时,是否可能有人干扰它?(document.documentElement.appendChild(myScript)

此外,涉及哪些安全问题 这种方法?注入一个脚本,改变XMLHttpRequest方法的opensend,以捕获 AJAX 调用,添加监听器,并以与原始参数完全相同的方式发送它们。

因此,假设我有以下内容:

var myScript = document.createElement('script');
myScript.src = chrome.extension.getURL('myscript.js');
var page = chrome.extension.getURL('mypage.html');

在这样的情况下,由于中间人的存在,$.get('mypage.html')能否返回与我的页面不同的内容?(换句话说,我是否可能无意中注入恶意页面?) document.documentElement.append(myScript)是否可以注入不同的脚本?假设有个中间人插入到了.src之间,是否可以更改实际脚本?
由于该脚本旨在按照链接方法更改XMLHttpRequest原型,因此我是否可以使用与原始调用传递的参数不同的参数进行send操作?
谢谢!

应使用内容脚本来注入此类代码(请参见同一文档中的编程注入)。 - wOxxOm
它必须按照描述的方式由内容脚本注入到DOM中。这是唯一的有效方法。 - Daniel Möller
那么,究竟有什么阻止你使用内容脚本或chrome.tabs.executeScript的呢? - wOxxOm
我从未尝试过“chrome.tabs.executeScript”,我可能会研究一下。它比我现在做的更安全吗? - Daniel Möller
我明白。假设我清楚自己能做什么、不能做什么,以及为什么决定以那种方式注入脚本。对此我没有任何问题,而且它运行得非常完美。问题仅仅在于可能存在的安全漏洞、他人的攻击、接收到与预期不同的请求等等。 - Daniel Möller
显示剩余2条评论
1个回答

1
首先,Chrome在从扩展获取文件时既是客户端又是服务器,因此您不需要 https,在这种情况下它没有用。这里没有第三方干涉。
可以想象另一个扩展拦截了ajax,但是要做到这一点,该扩展应已被用户授予适当的权限,因此它将不会是未经授权的拦截。至少它与任何https ajax一样安全。
正如您所说,另一种中间人攻击包括重新定义XMLHttpRequest,您可以使用扩展(经过适当用户授权)或任何其他注入页面脚本的方式来进行操作(特别是如果页面不是安全页面)。
我想知道是否可以在页面加载之前或至少在任何其他脚本执行之前注入并运行脚本,唯一的目的是“保护”原始的XMLHttpRequest对象(使用类似mySecureAjax = XMLHttpRequest;的东西)
您可以在页面上的任何脚本之前执行,但是您无法保证在其他扩展注入之前执行。

1
那么这意味着......如果有人可以更改XMLHttpRequest(就像我所做的那样),我的扩展程序可以为我的文件获取不同的结果,即使Chrome是客户端和服务器,对吗?我通过AJAX请求我的文件,如果XMLHttpRequest被破坏,我可能会得到其他任何东西.... - Daniel Möller
或者说我在扩展程序中使用的XMLHttpRequest只属于扩展程序上下文,因此它总是安全的吗?毕竟,我必须在DOM中寻找页面的XMLHttpRequest,因为在内容脚本中更改它没有任何效果...?我会测试一下。 - Daniel Möller
1
很好。内容脚本XMLHttpRequest不会受到页面XMLHttpRequest变化的影响。所以,我是安全的 :) 那么scriptelement.src = chrome.extension.getURL(...)呢?它会被黑客攻击吗? - Daniel Möller
1
你的回答在这里真的帮了我很多。我稍微编辑了一下问题,关于 myScript.src,你有什么想说的吗? - Daniel Möller
是的,分配myScript.src是将脚本放入页面的更好方法,您还可以避免使用XMLHttpRequest。 是的,页面中的脚本无法影响扩展上下文的XMLHttpRequest。 我不知道您担心“某人”更改此对象的原因,但您的扩展程序可以将HTML放在DOM上,而无需使用XMLHttpRequest。 - Alejandro Silvestri
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接