Javascript 谷歌chrome浏览器是否扩展;内容“;脚本沙盒?

Javascript 谷歌chrome浏览器是否扩展;内容“;脚本沙盒?,javascript,google-chrome,xmlhttprequest,sandbox,Javascript,Google Chrome,Xmlhttprequest,Sandbox,我的印象是内容脚本在页面上正确执行,但现在似乎有一些沙箱正在进行 我正在开发一个扩展来记录站点的所有XHR流量(用于调试和其他开发目的),在控制台中,以下嗅探代码起作用: var o = window.XMLHttpRequest.prototype.open; window.XMLHttpRequest.prototype.open = function(){ console.log(arguments, 'open'); return o.apply(this, ar

我的印象是内容脚本在页面上正确执行,但现在似乎有一些沙箱正在进行

我正在开发一个扩展来记录站点的所有XHR流量(用于调试和其他开发目的),在控制台中,以下嗅探代码起作用:

 var o = window.XMLHttpRequest.prototype.open;
 window.XMLHttpRequest.prototype.open = function(){
     console.log(arguments, 'open');
     return o.apply(this, arguments);
 };
 console.log('myopen');
 console.log(window, window.XMLHttpRequest, window.XMLHttpRequest.prototype, o, window.XMLHttpRequest.prototype.open);
每次发送XHR时,都会记录一条消息。然而,当我把它放在一个扩展中时,真正的原型并没有得到修改。显然,我的脚本看到的window.XMLHttpRequest.prototype与实际页面的不同


有办法解决这个问题吗?此外,这种沙箱行为是否在任何地方都有记录?我环顾四周,但什么也找不到。

你不能那样做。根据报告:

然而,内容脚本有一些缺点 局限性他们不能:

  • 使用chrome.*api(chrome.extension部分除外)
  • 使用由其扩展页定义的变量或函数
  • 使用网页或其他内容脚本定义的变量或函数
  • 进行跨站点XMLHttpRequests

尽管Chrome的内容脚本生活在一个“孤立的世界”,但通过在dom中插入脚本元素,您可以完成类似于您所要求的事情

作为概念证明,我使用了TamperMonkey Chrome扩展并创建了以下脚本:

// ==UserScript==
// @name         Modify Secret
// @namespace    http://your.homepage/
// @version      0.1
// @description  enter something useful
// @author       You
// @match        https://*/*
// @match        http://*/*
// @grant        none
// ==/UserScript==

console.log(secret);

var el = document.createElement('script');
el.innerHTML = 'secret = "the blue dog"';
document.body.appendChild(el);
然后我导航到哪个javascript正在运行:

var secret = 'the brown fox';

var secretPrinter = setInterval(function () {
    console.log(secret);
}, 1000);
如果你检查控制台,人们会期望看到“棕色狐狸”不断打印,但我们有“蓝色狗”



一般来说,我认为浏览器试图实现的安全概念是防止页面环境访问内容脚本的环境。意识到这一点,您可以通过浏览器扩展实现类似的功能也就不足为奇了。

啊,真是太遗憾了。谢谢你找到那个。要是chrome在它的扩展框架中有更多的功能就好了。该死。看来没有办法拦截和修改http请求。由于webrequest只支持修改标题,而不支持修改requestBody…谢谢!我已经更新了URL,因为我似乎已经从我的网站上删除了上一页。您好,3年后,谢谢您发布这篇文章。我应该意识到这是可能的。用它绕过沙盒“执行环境”几乎太容易了。我用它来monkeypatch xmlhttprequest。