防止websockets的CSRF

时间:2012-09-03 08:33:18

标签: websocket socket.io csrf csrf-protection

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

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

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

感谢您的所有建议!

2 个答案:

答案 0 :(得分:3)

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

有关详细信息,请参阅https://github.com/LearnBoost/socket.io/wiki/Authorizing

答案 1 :(得分:1)

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

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

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