我有很多关于使用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>当用户关闭浏览器时,会话应该会过期>如果用户从其他位置连接,或者应该有权访问他的“登录日志”,则应通知用户