2015-09-12 3 views
8

ソケット要求を処理するsocket.ioサーバーを設定しています。これはポート1234上で実行されています。これは、laravel 5.1アプリケーションを実行しています。 Laravelはセッションを処理するためにredisを使用しています。ノードとLaravelセッションを共有するには?

私はlaravelをsocket.ioに接続するためのチュートリアルがたくさんありますが、それはかなり簡単です。私はソケットに接続し、応答して、メッセージをlaravelアプリケーションに転送することができます。

しかし、すべてのチュートリアルでは、この設定の認証の部分を避けています。メッセージがソケット:1234スペース内で受信されると、要求が認証されていることを確認しながら、そのメッセージをlaravelに転送するにはどうすればよいですか。

理想的には、セッションを共有し、XSRFトークンを確認するだけです。 2つのアプリケーションが異なるポートにあるため、セッションを直接取得することはできません。

現在、私は別のアプローチを使用しています、それは以下が含まれます(ノード内)ソケット接続の際

  • 、私は解読クッキーは、ノードの暗号化ライブラリとノードのPHPUnserialiseライブラリを使用して接続上に送信されます。
  • これは
  • は私が
  • 私は、今度は、私のユーザーIDへのアクセスを提供し、そのセッションを、復号化のRedisのlaravelセッションにアクセスするためにこれを使用(クッキーから)私にlaravelセッションIDを付与

実際には_tokenを使用して起点を確認していないため、潜在的にセキュリティホールになる可能性があります。

+0

あなたは3 - サードパーティのソフトウェアに問題を解決しようとしましたか?たとえばMQ。それはあなたが必要とするすべてに合うように見えます。 – Ostin

答えて

7

あなたのコードは正しいと思いますし、多分それを行う唯一の方法だと思います。 session_idは通常、Cookieに格納され、ある時点でサーバーに送信する必要があります。 nodeとphpは異なる言語なので、セッションを直接共有することはできません。 redis、mysql、filesystemのような中間ストレージが常に必要です。もちろん、セッションを取得する方法。もちろん、セッションを取得するための鍵はsession_idです。

WebSocketを確保に関する興味深い記事:

https://www.christian-schneider.net/CrossSiteWebSocketHijacking.html

は、彼が示唆することは、あなたのWebSocket接続が確立されたときに確認することができ、自分のセッションにランダムに生成されたキーを追加することです。

session_id自体はすでにランダムですが、これらのsession_idは通常は長寿命です。したがって、短命のランダムIDはセキュリティを強化する可能性があります。 Short-livedは可能な限り短くする必要があります。phpがデータベースに追加し、ノードで接続が確認されたらデータベースから削除して、再度使用することはできません。ブラウザの文字列をチェックし、または1つのIPアドレスにセッションを固定するなどの追加のセッション検証技術がたくさんありますが、

:彼らはドンとして、私はチェックのこれらのタイプをお勧めしません

http://phpsec.org/projects/guide/4.html

は、」本当に多くの余分なセキュリティを追加するだけで、エンドユーザには煩わしいことです。あなたがなどSESSION_IDを通信する安全な方法を使用し

  • これは、ユーザーがあれば自分のブラウザ
  • ユーザーに通知しなければならない閉じたときにHTTPS
  • セッションの有効期限を意味します

    最も重要なのは、私はそれだと思います彼は別の場所から接続するか、または彼の "ログインログ"にアクセスする必要があります

0

これは約1年前に良い解決策を見つけました。私はそれを本当に使いやすいモジュールにすることに決めました。ハードコーディングせずにクッキーを取得するのに役立ちます。あなたはそのセッションにIDを取得し、mysqlのからそれを取り出すことができますし、Redisの

https://www.npmjs.com/package/node-laravel-session

関連する問題