2016-08-31 11 views
0

私は単純なチャットルームのためのクライアントとサーバを持っているとしましょう。適切なクライアント<->サーバの通信

これらはJSON文字列で通信します。

私は次の例が安全ではないことを理解していますが、これが効率的な通信方法である場合にのみ私は興味があります。

// The Client connects to the server. 
// The Client sends a JSON string with the following variables to the server: 
    --> Intention: "Request" 
    --> Context: "Login" 
    --> Message: "username:admin|password:123" 
// The Server receives the JSON string and the string goes through an if-statement: 
    --> if(Intention.Equals("Request")){...}else if(Intention.Equals("Response")){...} 
// The Server now knows it's a Request and moves on to the next step. 
    --> if(Context.Equals("Login")){.<check if user exists in server database and if the login details match>.} 
// If the login details are correct, The Server marks the connected Client as logged in and sends a JSON string back to The Client: 
    --> Intention: "Response" 
    --> Context: "Login" 
    --> Message: "OK" 
// The Client receives the messages and sees it's OK, now the Client shows the user control panel and chatbox to the user which all send other Request JSON strings to The Server. 
// Any other context than "Login" check if the Client actually is marked as logged in, if not, the server returns a response with "ERR_NOT_LOGGED_IN" 

今、私はいくつか質問があります。

  1. これは、クライアントとサーバーの間で前後に通信の効率的な/良い方法だろうか?
  2. 良い点と悪い点は何ですか?
  3. コミュニケーションをより良く/より効率的にするためのヒントがありますか?
  4. これは大企業のチャットサーバーであり、パスワードはプレーンテキストで保存されていませんが、秘密の&公開鍵で処理された場合、大きなセキュリティ上の欠陥は他にありますか?

私はクライアントとサーバーが通信するための良い方法について多くを見つけるので、私はではなく、実際のコンテンツについて、求めていますが、前後に送信されます。

ありがとうございます!

答えて

0

あなたが言ったように、これはあまり安全ではありません。いくつかのMITMは接続をハックして、それをowmコマンドで送ることができます。ので、これは安全にするために、あなたがコンテンツを保護し、あなたの質問に答えるために偽造メッセージ

を避けるために、チェックサムを使用するように、いくつかの非対称/対称型の暗号化を行うために試してみてください:

  1. JSONは、XMLよりも少ないオーバーヘッドを持っていますJSON自体は通信プロトコルとして使用されることは意図されていません。 JSONは、通常、ゲーム内のいくつかのデータ、つまりコンフィグを永続化するために使用されます...いくつかのメッセンジャーもそれらを使用します(少なくともAPIs)
  2. 何について?良いことは、独自のプロトコル(通信)にはいくつかの小さなステップがあるということです。悪い:あなたが送信するものは、ベアテキスト(暗号化なし、チェックサムなし)です。あなたはLANチャットの何らかの種類のためにこれを使うことができます
  3. 独自のプロトコルを作成し、Tcp経由で送信し、gzipを使用してストリームを圧縮します。
  4. ちょうど暗号化は役に立ちません。この受信したメッセージがMITMからではなくチャットパートナーからのものであることを証明するには、チェックサムを計算し、追加し、暗号化して送信する必要があります。秘密の暗号化について何かをお読みください
関連する問題