Google chrome extension 从chrome扩展访问Websocket流量
有一个页面(游戏),通过WebSocket与服务器通信。我可以在Chrome开发者工具中看到数据(帧)。是否可以从chrom扩展访问/修改此通信?从上的讨论判断,与chrome.webRequest的正常请求不同,目前没有用于拦截WebSocket通信的API。它已分配,但尚未完成Google chrome extension 从chrome扩展访问Websocket流量,google-chrome-extension,websocket,Google Chrome Extension,Websocket,有一个页面(游戏),通过WebSocket与服务器通信。我可以在Chrome开发者工具中看到数据(帧)。是否可以从chrom扩展访问/修改此通信?从上的讨论判断,与chrome.webRequest的正常请求不同,目前没有用于拦截WebSocket通信的API。它已分配,但尚未完成 编辑:最近(截至2016年11月)关于该漏洞的活动表明正在进行修补。目前,访问或修改Websocket流量的唯一方法是使用to,用自己的包装器替换Websocket构造函数。这个包装器的行为应该与最初的WebSock
编辑:最近(截至2016年11月)关于该漏洞的活动表明正在进行修补。目前,访问或修改Websocket流量的唯一方法是使用to,用自己的包装器替换
Websocket
构造函数。这个包装器的行为应该与最初的WebSocket实现类似,但是您可以添加更多内容,比如将发送/接收的消息记录到扩展中
为了防止网站崩溃,您必须确保WebSocket
包装完全符合标准。必须实施的接口记录在
有关如何包装DOM构造函数的灵感,请参见例如my。您可以自由地重复使用部分代码(例如EventTarget
接口的实现,这也是WebSocket
API的要求)
更多强调:确保您的实现符合标准WebSocket API的接口,否则可能会破坏某些站点有一个WebSocket包装器,您可以使用它访问WebSocket流量:
我遇到了这个问题并尝试了上面的解决方案,不幸的是,我的目标站点中的脚本仍然发现WebSocket被篡改和破坏,这很糟糕 因此,我提出了自己的解决方案:
var ws = window.WebSocket;
window.WebSocket = function(a,b){
var ret = new ws(a,b);
let handle = setInterval(function(){
if(ret.onmessage){
clearInterval(handle);
let o = ret.onmessage;
ret.onmessage = function(m){
//do what your want to m
o(m);
};
}
},50);
return ret;
}
如果您要检查的站点确实使用WebSocket,我肯定会在创建WebSocket对象后的某个时间将其分配给onmessage
,只需定期检查它并使用您自己的函数重新分配它。似乎是固定的且可用的。在manifest.json中,需要显式指定权限
{
...
"permissions": ["webRequest", "ws://*/*", "wss://*/*"]
...
}
在网络过滤器中,它应该被指定为websocket请求
const networkFilters = {
urls: [
"wss://echo.websocket.org/*"
]
};
chrome.webRequest.onBeforeRequest.addListener((details) => {
const { tabId, requestId } = details;
// do stuff here
}, networkFilters);
考虑到内容脚本具有沙盒执行环境,这将如何工作?它不会取代该页面使用的
WebSockets
。@Xan请按照我回答中的“注入脚本”链接进行操作。“天哪,它全是星星!”-谢谢分享谢谢!我已经尝试将我的脚本注入DOM。他们使用DojoCometd进行webSocket通信。我的想法是覆盖org.cometd.WebSocketTransport的onMessage函数。问题是:我的script.js在org.cometd的js-loaded->org未定义之前激发。(虽然如果我使用console.log(org)我可以看到它)。这是cometd.js,WebSocketTransport函数在第565行。而且仍然没有API(6年的人),可能他们不想将它添加到chrome中,因为扩展会滥用它太多