php – 如何与节点共享Laravel会话?

我正在设置一个socket.io服务器来处理套接字请求.这是在端口1234上运行.这是在laravel 5.1应用程序的旁边运行. Laravel正在使用redis来处理会话.

我有很多关于使用socket.io连接laravel的教程,这一切都非常简单.我可以在套接字和laravel应用程序中连接,响应和转发消息.

但是,每个教程都避免了此设置的auth部分.一旦在套接字:1234空间内收到消息,如何在确保请求被授权的同时将该消息转发到laravel.

理想情况下,我只是简单地共享会话,并验证XSRF令牌.由于这两个应用程序位于不同的端口上,因此我无法直接接收会话.

目前我正在使用另一种方法,它涉及以下内容

>在套接字连接(在节点中)时,我使用节点的Crypto库和节点的PHPUnserialise库解密在连接上发送的cookie.
>这给了我laravel会话ID(来自cookie)
>我用它来访问redis laravel会话
>然后我解密该会话,这反过来让我访问用户ID

它有效,但我觉得它可能是一个安全漏洞,因为我实际上并没有使用_token来验证原点.

我认为你的代码是正确的,也许是唯一的方法.
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

我不推荐这种类型的检查,因为它们并没有真正增加额外的安全性,只会给最终用户带来麻烦.

最重要的是我认为:

>您使用安全的方式来传递session_id等.这意味着HTTPS>当用户关闭浏览器时,会话应该会过期>如果用户从其他位置连接,或者应该有权访问他的“登录日志”,则应通知用户

相关文章

laravel的dd函数不生效怎么办
看不懂laravel文档咋办
安装laravel框架出现command怎么办
Laravel开发API怎么使用事务
laravel怎么构建复杂查询条件
laravel如何实现防止被下载