我正在开发一个在页面中注入脚本的扩展程序。
扩展基本上是一个内容脚本,它将另一个脚本注入DOM。 (Why not just a content script?)
(我的代码没有任何问题,它运行正常。这里的主要目的是仅了解Web开发中的安全问题)
注入的脚本是我的扩展中的源文件,我使用chrome.extension.getURL('myscript.js')
中的地址通过JQuery.get获取它。
我应该注意哪些安全问题?
该网页不 https
,此get
可以返回与我的脚本不同的内容吗?
我还使用相同的方法插入HTML内容。 HTML文件来自我的扩展,就像scritp一样。回复文本是否有可能被中间人玷污?
如果存在此类安全问题,有哪些常见做法?
不同的是,如果我创建一个脚本(document.createElement('script')
)并将其源设置为我的文件。当我把这个瘸子注入dom时,有人可能会干涉吗? (document.documentElement.appendChild(myScipt)
)
此外,涉及this approach的安全问题是什么?注入一个更改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')
可以返回与我的页面不同的内容吗? (换句话说,我可以在不知不觉中注入恶意页面吗?)document.documentElement.append(myScript)
可以注入不同的脚本吗?一个假想的中间人是否可以在.src
和更改实际脚本之间?XMLHttpRequest
原型,如链接方法中所述,我是否可以send
使用与原始调用传递的参数不同的参数?谢谢!
答案 0 :(得分:1)
首先,当您从扩展程序中获取文件时,Chrome既是客户端又是服务器,因此您不需要https,在这种情况下它毫无价值。这里中间没有男人。
可以想到另一个扩展拦截ajax,但要做到这一点,扩展应该已经拥有用户授予的适当权限,因此它不会成为未经授权的拦截。至少它不会比任何https ajax安全。
而且,正如你所说,中间攻击中的另一个人在于重新定义XMLHttpRequest,你可以使用扩展(使用适当的用户授权)或任何其他方式在页面中注入脚本(特别是如果页面是不安全的。)
我想知道你是否可以在页面加载之前注入并运行脚本,或者至少在任何其他脚本执行之前注入并运行脚本,其唯一目的是" secure"原始的XMLHttpRequest对象(类似于mySecureAjax = XMLHttpRequest;
)
您可以在页面上的任何脚本之前执行,但是您无法保证在另一个扩展程序注入之前执行。