如何防止跨站websocket劫持?

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

我正在编写一个 SaaS Web 应用程序,其中数据通过 Websockets 提供给客户端。我已经通过连接上的用户访问令牌实现了身份验证。我需要防止来自不同站点以及卷曲请求的 Websocket 连接。

站点原始策略和跨源资源共享(CORS)对于 websocket 无效,因此当将 http 连接升级到 websocket 时,验证 origin 标头将阻止来自其他网站的访问,因为 Origin 标头是由浏览器验证的。

这里的问题是,只有浏览器发起的请求才需要真实的来源。可以通过浏览器外部的curl 请求来欺骗源。那么如何防止用户使用身份验证令牌连接到 websocket 并欺骗源呢?

javascript http websocket same-origin-policy saas
1个回答
0
投票

验证原始标头将阻止从其他网站访问,因为原始标头是由浏览器验证的。

这就是标题中问题的答案——在服务器端验证 HTTP Origin 标头将防止劫持,因为浏览器将发送正确的源。

尚不清楚您为何担心用户在浏览器外部进行连接的能力。与 CSRF 一样,跨站点 Websocket 劫持实际上是针对用户浏览器及其信任的攻击,而不是针对服务器本身的攻击。因此,出于安全目的的 Origin 标头的概念在浏览器上下文之外并不真正相关。

通过网站,您无法真正控制有关客户的任何信息。即使用户确实在具有正确来源的浏览器中访问您的网站,他们也可以运行 JavaScript 来发送任意 WebSocket 消息(如果这是您关心的问题)。如果您仍然担心用户执行此操作的能力,那么花一些时间审核服务器端的逻辑和验证可能是明智的,以确保应用程序行为正确,无论用户向其抛出什么。

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