Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当连接到WebSocket时,如何覆盖Chrome中的原始标头?_Javascript_Google Chrome_Websocket - Fatal编程技术网

Javascript 当连接到WebSocket时,如何覆盖Chrome中的原始标头?

Javascript 当连接到WebSocket时,如何覆盖Chrome中的原始标头?,javascript,google-chrome,websocket,Javascript,Google Chrome,Websocket,我正在尝试连接到外部web套接字服务器,该服务器不是我自己运行的。我想从localhost javascript文件连接到它,因此origin头的值为null 我知道这是一项防止跨网站伪造的措施。然而,由于我在localhost上,我应该能够通过让Chrome发送一个定制的Origin头来伪造这个 可能吗?(如果我需要延期,可以) 如果没有,我实现上述目标的最佳选择是什么?谢谢。据我所知,这是不可能的,它会破坏Chrome中针对CSRF的安全防护 如果您能够做到这一点,那么XHR的整个概念就会崩

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

我知道这是一项防止跨网站伪造的措施。然而,由于我在localhost上,我应该能够通过让Chrome发送一个定制的Origin头来伪造这个

可能吗?(如果我需要延期,可以)


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

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

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

是一个扩展,您可以使用它动态地操纵头,但到目前为止,我还无法让它操纵套接字头

如果你想了解更多的话


但是这并不能阻止你实现你自己的客户端(代替chrome),你可以直接发送你想要的任何标题,不确定这是否对你有帮助,抱歉。

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


只有从web服务提供商明确接受的主机连接到外部WebSocket时,才能连接到该WebSocket。许多标头是不可信的(因为它们可以被覆盖),但是
Origin的情况并非如此,因为它不仅为用户提供了安全性,而且为服务提供商提供了防止不必要连接的安全性。

网页无法更改Origin标头,但是扩展可以通过API修改请求标头。但是通过这个API,除非服务器还支持通过http的其他通信方式(例如长轮询),否则这没有帮助


不过仍然有一个解决方案:只需在iframe(例如
https://example.com/favicon.ico
https://example.com/robots.txt
)并从那里使用打开WebSocket。

这取决于您想如何使用chrome浏览器。既然您提到了localhost,我想您应该开发并将其用于某种刮取。我建议您研究一下,由于您使用的是真正的浏览器,因此(几乎)任何类型的保护都会变得毫无用处。CORS、Origin、Cookie或任何任意头值都将在您的控制下,您可以为xhr/websocket请求发送自定义头。如果要以更高级的方式进行操作,可以使用Network.continueInterceptedRequest。您可能只想使用诸如“-禁用web安全性,-禁用xss auditor,-禁用客户端网络钓鱼检测,-允许不安全的本地主机”之类的参数启动chrome。有关此类选项的详细信息,请访问。但是,最后一个选项需要一个插件来欺骗源标题,因此我建议使用第一个选项。

通常都有针对CSRF的安全防护措施来保护用户。然而,在这种情况下,我(作为用户)的意图是给chrome添加一个例外,以削弱这种保护。由于chrome创建并发送http请求,理论上我应该能够覆盖任何头(可能使用扩展)。我将添加一个我发现的允许修改头的扩展。我能够修改标题,但由于某些原因,在使用套接字时还不能修改。有一些我不明白的地方。该服务如何确保我没有提供虚假原产地?为什么我不能进入Chrome的源代码并修改限制部分,或者构建我自己的没有此类限制的浏览器?我想,有一个设计原则不允许我这么做,但它是什么?好吧,我检查了RFC,它说:“目的不是阻止非浏览器建立连接,而是确保受潜在恶意JavaScript控制的可信浏览器不能伪造WebSocket握手。”基于此,我认为,源文件头只是防止恶意网站在用户不知情的情况下从用户浏览器连接到第三方web套接字的一种手段。在这种情况下,服务提供商只验证源文件头并相信它不会妥协。当然,从理论上讲,您可以篡改浏览器代码或为自定义HTTP请求创建工具,但这不是小事,也不推荐这样做。是的,Origin头首先针对用户安全。这或多或少与爬行网站相同,爬行网站在robots.txt文件中明确禁止这种行为(没有人能保证它会得到遵守)。该服务无法确保您提供的是合法来源,但可以肯定的是,您的网站不会欺骗其他用户连接到需要正确来源的第三方。@DavidFrank是的,您可以创建这样的浏览器,但如何强制其他人使用您修改过的浏览器?如果你是唯一一个使用不安全浏览器的人,那么你只会伤害自己。我们相信Apple/Google/Mozilla会为我们提供阻止修改源文件标题的浏览器。谢谢你提供的提示,我将在周末试用并回来。