我正在尝试连接到外部web套接字服务器,这是不是由我自己运行。我想从本地主机javascript文件连接到它,因此origin头具有空值。
我明白这是一种防止跨站点伪造的措施。然而,因为我是在本地主机上,我应该能够通过让Chrome发送一个自定义的起源头来伪造这一点。
有可能吗?(如果我需要一个扩展,那很好)
如果没有,实现上述目标的最佳选择是什么?谢谢你。
网页不能更改Origin头,但扩展可以通过chrome修改请求头。webRequest API。但是这个API不支持ws://
和wss://
,所以这没有帮助,除非服务器还支持通过http(s)的其他通信方式(例如长轮询)。
仍然有一个解决方案:简单地加载一个(已知的)网页在期望的起源在iframe(例如https://example.com/favicon.ico
或https://example.com/robots.txt
),并使用一个内容脚本从那里打开WebSocket
Origin
标头是由用户代理(作为浏览器实现的一部分)自动设置的标头之一,不能通过编程或扩展进行更改。这是有意义的,因为web服务提供商不能允许来自本地主机的随机连接。
只有当你从一个被web服务提供者明确接受的主机上进行连接时,你才能连接到外部WebSocket。许多标头不能被信任(因为它们可以被覆盖),但Origin
不是这种情况,因为它不仅为用户提供了安全性,而且为服务提供商提供了防止不必要连接的安全性。
据我所知,这将是不可能的,它会打破安全防范CSRF在Chrome。
如果你能做到这一点,XHR的整个概念就会瓦解。
这是一个扩展,你可以用它来操纵头在飞行,但到目前为止,我还没有能够得到它来操纵套接字头。
如果你想了解更多,请点击这里。
但是这并不能阻止你实现你自己的客户端(在chrome的地方),你可以从字面上发送任何你想要的头,不确定这是否有助于你,对不起。
这取决于你想如何使用你的chrome浏览器。既然您提到了localhost,我假设您开发并将使用它进行某种抓取。我建议你探索Chrome DevTools协议,这将渲染(几乎)任何类型的保护无用,因为你使用一个真正的浏览器。CORS, Origin, Cookie或任何任意标头值将在您的控制之下,并且您可以为xhr/websocket请求发送自定义标头。如果你想以更高级的方式操作,你可以使用network . continueintercepterequest。你可能只希望使用"——disable-web-security,——disable-xss-auditor,——disable-client- phishing-detection,——allow-insecure-localhost"这样的参数来启动chrome。然而,最后一个选项需要一个插件来欺骗起源头,所以我推荐第一个选项。