我目前正在考虑 websockets 中的 CSRF 漏洞。
我已经阻止了所有跨域 websocket 请求,但是存在脚本(例如这个 python bad boy)来绕过这些安全措施。
是否值得在用户的 index.html 中包含一个令牌,它必须作为查询字符串包含在 socket.io.connect() 调用中?这样在服务器上我们可以检查令牌是否符合我们的预期,否则阻止连接请求。
感谢所有的建议!
我目前正在考虑 websockets 中的 CSRF 漏洞。
我已经阻止了所有跨域 websocket 请求,但是存在脚本(例如这个 python bad boy)来绕过这些安全措施。
是否值得在用户的 index.html 中包含一个令牌,它必须作为查询字符串包含在 socket.io.connect() 调用中?这样在服务器上我们可以检查令牌是否符合我们的预期,否则阻止连接请求。
感谢所有的建议!
你为什么不为你的 socket.io 连接设置一个授权处理程序?您可以根据握手期间收集的信息拒绝/接受那里的连接。
有关这方面的更多详细信息,请参阅https://github.com/LearnBoost/socket.io/wiki/Authorizing。
我将 socket.io 与 django 一起使用。我处理授权的方式是首先要求用户使用包含 CSRF 令牌的常规 HTTP 表单登录。成功登录后,会设置会话 cookie,并将用户重定向到 socket.io 应用程序。
在我的连接授权代码中,我检查 cookie 并验证用户是否已登录,如果检查失败则返回“401 Not Authorized”。
如果您不想要求用户先登录,也可以设置一个 CSRF cookie 并检查它,或者您可以在授权期间将 CSRF 令牌作为 URL 参数传递,正如@3rdEden 指出的那样。