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

Dav*_*ank 6 javascript google-chrome websocket

我正在尝试连接到外部Web套接字服务器,这不是我自己运行的.我想从localhost javascript文件连接到它,因此origin头具有null值.

我知道这是针对跨站点伪造的措施.但是,因为我在localhost上,所以我应该能够通过让Chrome发送自定义的Origin标头来伪装它.

可能吗?(如果我需要延期,那很好)

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

Rob*_*b W 12

网页无法更改Origin标头,但扩展可以通过chrome.webRequest API 修改请求标头.但ws://wss://不支持此API,所以这并不能帮助,除非服务器还可以通过HTTP(S)(例如长轮询)支持多种通讯方式.

但仍有一个解决方案:只需在iframe(例如https://example.com/favicon.icohttps://example.com/robots.txt)中的所需原点加载(已知)网页,然后使用内容脚本从那里打开WebSocket.


小智 5

Origin头是由用户代理(如浏览器实现的一部分)自动设置的集流管中的一个,并且不能被编程或通过扩展改变。这是有道理的,因为Web服务提供商不能允许来自本地主机的随机连接。

仅当从Web服务提供商明确接受的主机中进行连接时,才能连接到外部WebSocket。许多标头不能被信任(因为它们可以被覆盖),但事实并非如此,Origin因为它不仅为用户提供了安全性,而且还为服务提供者提供了防止不必要连接的安全性。

  • 有一点我不明白。该服务如何确保我没有提供虚假来源?为什么我不能进入Chrome的源代码并修改限制部分或构建自己的没有这种限制的浏览器?我猜,有一个设计原则不允许我这样做,但它是什么? (2认同)
  • @DavidFrank 是的,您可以创建一个执行此操作的浏览器,但是如何强迫其他人使用您修改过的浏览器?如果您是唯一使用不安全浏览器的人,那么您只会伤害自己。我们相信 Apple/Google/Mozilla 为我们提供的浏览器可以防止修改 Origin 标头。 (2认同)