确保WebSockets只从已知域连接



我如何确保只允许在特定域列表上托管的脚本连接到我的WebSocket应用程序?

或者为了防止基于意见的激烈投票,有没有最先进的或本地的方法?

我不打算实现用户认证

WebSocket的机制是origin标头。

这个HTTP头被浏览器设置为提供HTML的主机的域名,其中包含打开WebSocket连接的JavaScript。

WebSocket服务器可以在WebSocket协议的初始打开握手期间检查origin报头。如果origin与已知的白名单匹配,服务器只能允许连接进行。

标头不能从JavaScript中修改,RFC6455规范要求所有浏览器包含

警告:非浏览器 WebSocket客户端当然可以将origin标头伪造为任何它喜欢的值。

@oberstet给了你正确的答案。

如果你担心机器人或编程HTTP代理,那么你将有一个糟糕的时间。HTTP请求中的所有内容都可以被欺骗。您唯一的选择是使用cookie附加一个具有有限时间有效性的令牌,以证明用户通过允许的网站获取该脚本。在WebSocket握手中获取cookie并决定是否允许它。

。:当一个用户访问你的网站,或你的一个网站,返回一个cookie与一个对称加密令牌基于用户的IP地址,用户代理头,和起源头;当用户发起WebSocket连接时,如果它在相同的第二域,它将发送cookie,然后如果数据加起来允许连接,否则拒绝它。如果WS在另一个域中,那么您将不得不忘记cookie,并在连接建立后依赖于web套接字消息来检查连接的有效性。

相关内容

  • 没有找到相关文章

最新更新