连接到 WebSocket 时如何覆盖 Chrome 中的 Origin 标头?

问题描述 投票:0回答:5

我正在尝试连接到外部 Web 套接字服务器,该服务器不是由我自己运行。我想从本地主机 javascript 文件连接到它,因此原始标头具有空值。

我了解这是针对跨站伪造的措施。然而,由于我在本地主机上,我应该能够通过让 Chrome 发送自定义 Origin 标头来伪造这一点。

可能吗? (如果我需要延期,那没问题)

如果没有,实现上述目标的最佳选择是什么?谢谢你。

javascript google-chrome websocket
5个回答
21
投票

网页无法更改 Origin 标头,但扩展程序可以通过 chrome.webRequest API 修改请求标头。但是此 API 不支持

ws://
wss://
,因此除非服务器还支持通过 http(s) 进行其他通信方式(例如长轮询),否则这没有帮助。

仍然有一个解决方案:只需在 iframe 中的所需来源处加载(已知)网页(例如

https://example.com/favicon.ico

https://example.com/robots.txt
),然后使用 
内容脚本 从那里打开 WebSocket。


12
投票

Origin

标头是由用户代理自动设置的标头之一(作为浏览器实现的一部分),并且不能以编程方式或通过扩展进行更改。这是有道理的,因为 Web 服务提供商不允许来自本地主机的随机连接。

仅当您从 Web 服务提供商明确接受的主机上进行连接时,才可以连接到外部 WebSocket。许多标头不可信(因为它们可以被覆盖),但

Origin

 的情况并非如此,因为它不仅为用户提供安全性,还为服务提供商提供针对不需要的连接的安全性。


2
投票
据我所知这是不可能的,它会破坏 Chrome 中针对 CSRF 的安全防护。

如果你能够做到这一点,XHR 的整个概念就会崩溃。

这里是一个扩展,您可以使用它来动态操作标头,但到目前为止我还无法让它来操作套接字标头。 如果您想了解更多相关信息,请查看

此处

但这并不能阻止您实现自己的客户端(

代替 chrome

),您可以在其中发送您想要的任何标头,不确定这是否对您有帮助,抱歉。


1
投票
Chrome DevTools Protocol

,这将使(几乎)任何类型的保护变得毫无用处,因为您使用的是真正的浏览器。 CORS、Origin、Cookie 或任何任意标头值将在您的控制之下,并且您可以为 xhr/websocket 请求发送自定义标头。如果您想以更高级的方式进行操作,可以使用 Network.continueInterceptedRequest。您可能只想使用“--disable-web-security、--disable-xss-auditor、--disable-client-side-phishing-detection、--allow-insecure-localhost”等参数启动 chrome选项位于peter.sh。但是,最后一个选项需要一个插件才能欺骗原始标头,所以我推荐第一个选项。


0
投票

//set the headers socket.Options.SetRequestHeader("Authorization", authInfo.AuthToken); //required, used for Auth on cara cloud side socket.Options.SetRequestHeader("User-Agent", "XYZ Cara Connector");

© www.soinside.com 2019 - 2024. All rights reserved.