我正在设置一个socket.io服务器来处理套接字请求。这是在端口1234上运行。这是在laravel 5.1应用程序旁边运行。 Laravel正在使用redis来处理会话。
我有很多关于使用socket.io连接laravel的教程,这一切都非常简单。我可以在套接字和laravel应用程序中连接,响应和转发消息。
但是每个教程都避免了此设置的auth部分。一旦在套接字:1234空间内收到消息,如何在确保请求被授权的同时将该消息转发到laravel。
理想情况下,我只是简单地共享会话,并验证XSRF令牌。由于这两个应用程序位于不同的端口上,因此我无法直接接收会话。
目前我正在使用另一种方法,它涉及以下内容:
它有效,但我觉得它可能是一个安全漏洞,因为我实际上并没有使用_token来验证原点。
答案 0 :(得分:7)
我认为你的代码是正确的,也许是唯一的方法。 session_id通常存储在cookie中,并且在某些时候必须发送到服务器。由于node和php是不同的语言,因此无法直接共享会话。你总是需要一个像redis,mysql或filesystem这样的中间存储。当然还有一种检索会话的方法。检索会话的关键当然是session_id。
关于保护websockets的一篇有趣帖子:
https://www.christian-schneider.net/CrossSiteWebSocketHijacking.html
他建议将随机生成的密钥添加到会话中,以便验证何时建立websocket连接。
session_id本身已经是随机的,但这些session_id通常是长寿命的,因此短暂的随机ID可以提高安全性。短命应该尽可能短:让php将它添加到数据库中,一旦在节点中验证连接,将其从数据库中删除,这样就不能再使用它了。
有许多额外的会话验证技术,例如检查浏览器字符串或将会话固定到一个IP地址:
http://phpsec.org/projects/guide/4.html
我不推荐这些类型的支票,因为它们并没有真正增加额外的安全性,只会让最终用户烦恼。
最重要的是,我认为是:
答案 1 :(得分:0)
大约一年前,我找到了一个很好的解决方案。我决定把它变成一个模块,它非常容易使用。帮助您获得cookie而无需对其进行硬编码。帮助您获取该会话ID并从mysql和redis
中检索它