我正在开发一个在页面中注入(inject)脚本的扩展。
该扩展基本上是一个内容脚本,它将另一个脚本注入(inject)到 DOM 中。 ( Why not just a content script? )
(我的代码没有任何问题,它工作正常。这里的主要目的只是了解 web 开发中的安全问题)
注入(inject)的脚本是我的扩展程序中的一个源文件,我通过 JQuery.get 获取它,使用来自 chrome.extension.getURL('myscript.js')
的地址。
是否有任何我应该注意的安全问题?
该页面不是 https
,这个get
可以返回与我的脚本不同的东西吗?
我还使用相同的方法插入 HTML 内容。 HTML 文件来 self 的扩展,就像脚本一样。响应文本是否有可能被中间人破坏??
避免此类安全问题(如果存在)的常见做法是什么?
不同的是,如果我创建一个脚本 (document.createElement('script')
) 并将其源设置为我的文件。当我将这个脚本注入(inject) dom 时,是否有人可以进行干预? (document.documentElement.appendChild(myScipt)
)
此外,涉及this approach的安全问题是什么? ?注入(inject)更改 XMLHttpRequest
方法 open
和 send
的脚本,以捕获 ajax 调用、添加监听器并使用完全相同的原始参数发送它们.
所以,也就是说,我有这些:
var myScript = document.createElement('script');
myScript.src = chrome.extension.getURL('myscript.js');
var page = chrome.extension.getURL('mypage.html');
- 在这种情况下,
$.get('mypage.html')
是否会由于中间人而返回与我的页面不同的任何内容? (换句话说,我是否会在不知不觉中注入(inject)恶意页面?) document.documentElement.append(myScript)
可以注入(inject)不同的脚本吗?中间人是否可以进入.src
并更改实际脚本?- 由于脚本旨在更改链接方法中描述的
XMLHttpRequest
原型(prototype),我是否可以使用与原始调用传递的参数不同的参数发送
?
谢谢!
最佳答案
首先,当你从扩展程序中获取文件时,Chrome 既是客户端又是服务器,所以你不需要 https,在这种情况下它毫无值(value)。中间没有人。
可以想到拦截 ajax 的另一个扩展,但要这样做,该扩展应该已经具有用户授予的适当权限,所以它不会是未经授权的拦截。至少它的安全性不会低于任何 https ajax。
而且,正如您所说,中间人攻击的另一个组成部分是重新定义 XMLHttpRequest,您可以使用扩展(具有适当的用户授权)或任何其他方式在页面中注入(inject)脚本(特别是如果页面是不是安全的)。
我想知道您是否可以在页面加载之前或至少在任何其他脚本执行之前注入(inject)并运行脚本,其唯一目的是“保护”原始 XMLHttpRequest 对象(使用类似 mySecureAjax = XMLHttpRequest; 的东西)。
)
您可以在页面上的任何脚本之前执行,但不能保证在另一个扩展程序注入(inject)之前执行。
关于javascript - Chrome 扩展中的 Chrome.extension.getURL 和 AJAX 安全问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31255142/