9

我目前正在考虑 websockets 中的 CSRF 漏洞。

我已经阻止了所有跨域 websocket 请求,但是存在脚本(例如这个 python bad boy)来绕过这些安全措施。

是否值得在用户的 index.html 中包含一个令牌,它必须作为查询字符串包含在 socket.io.connect() 调用中?这样在服务器上我们可以检查令牌是否符合我们的预期,否则阻止连接请求。

感谢所有的建议!

4

2 回答 2

3

你为什么不为你的 socket.io 连接设置一个授权处理程序?您可以根据握手期间收集的信息拒绝/接受那里的连接。

有关这方面的更多详细信息,请参阅https://github.com/LearnBoost/socket.io/wiki/Authorizing

于 2012-09-03T19:09:41.993 回答
1

我将 socket.io 与 django 一起使用。我处理授权的方式是首先要求用户使用包含 CSRF 令牌的常规 HTTP 表单登录。成功登录后,会设置会话 cookie,并将用户重定向到 socket.io 应用程序。

在我的连接授权代码中,我检查 cookie 并验证用户是否已登录,如果检查失败则返回“401 Not Authorized”。

如果您不想要求用户先登录,也可以设置一个 CSRF cookie 并检查它,或者您可以在授权期间将 CSRF 令牌作为 URL 参数传递,正如@3rdEden 指出的那样。

于 2012-09-07T04:40:25.340 回答