我正在编写一个SaaS Web应用程序,其中数据通过websockets提供给客户端。我已经通过连接上的用户访问令牌实现了身份验证。我需要阻止来自不同站点的WebSocket连接以及curl请求。
站点源策略和跨源资源共享(CORS)对websockets无效,因此当将http连接升级到websockets时,验证源头将阻止来自另一个网站的访问,因为源头是由浏览器验证的。
这里的问题是,只有浏览器发起的请求才要求真实的来源。可以通过浏览器外部的curl请求欺骗源。那么我如何才能防止用户使用他们的身份验证令牌连接到WebSocket并欺骗源呢?
1条答案
按热度按时间sf6xfgos1#
验证Origin标头将阻止来自另一个网站的访问,因为Origin标头由浏览器验证。
这是你在标题中的问题的答案-在服务器端验证HTTP Origin头将防止劫持,因为浏览器将发送正确的起源。
目前尚不清楚您为什么担心用户在浏览器外部连接的能力。与CSRF一样,跨站点WebSocket劫持实际上是针对用户浏览器及其在某些情况下跨站点发送凭据的天真意愿的攻击,而不是针对服务器本身的攻击。因此,出于安全目的的源头的概念在浏览器上下文之外并不真正相关。
对于一个网站,你并不能真正控制客户端的任何东西。即使一个用户真的在你的网站上,在浏览器中有正确的来源,他们也可以运行JavaScript来发送任意的WebSocket消息。如果您仍然担心用户是否有能力执行此操作,那么明智的做法可能是花一些时间在服务器端审核逻辑和验证,以确保应用程序无论用户向其抛出什么都能正确运行。