2016-08-31 5 views
0

간단한 chatroom을위한 클라이언트와 서버가 있다고 가정 해 봅니다.적절한 클라이언트 <-> 서버 통신

그들은 JSON 문자열을 통해 통신합니다.

나는 다음 예제가 안전하지 않다고 생각하지만, 이것이 효율적인 의사 소통 방법 인 경우에만 관심이 있습니다.

  1. 이 앞뒤로 클라이언트와 서버 사이의 통신을 효율적으로/좋은 방법이 될 것이다 :
    // 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" 
    

    은 지금은 몇 가지 질문이?
  2. 좋은 점이나 나쁜 점은 무엇입니까?
  3. 커뮤니케이션을보다 효율적으로 /보다 효율적으로 (내용별로) 만드는 방법에 대한 조언이 있습니까?
  4. 큰 회사의 채팅 서버가되고 암호가 일반 텍스트로 저장되어 있지 않지만 개인 & 공개 키로 작업 한 경우 다른 큰 보안 결함이 있습니까?

나는 클라이언트와 서버가 통신 할 좋은 방법에 대해 많이 찾을 수 있기 때문에이 아니라 실제 내용에 대한, 요구하고 앞뒤로 전송되는.

미리 감사드립니다.

답변

0

말씀 드린대로 매우 안전하지 않습니다. 일부 MITM은 연결을 해킹하고 owm 명령을 전송할 수 있습니다. 그래서 당신은 당신의 질문에 대답하기 위해 가짜 메시지를

을 방지하기 위해 콘텐츠를 보호하고 검사 합계를 사용하여 약간의 비대칭/symetric 암호화를 만들려고한다,이 안전하게 만들기 위해 :

  1. JSON은 XML보다 적은 오버 헤드가를, JSON 자체는 통신 프로토콜로 사용되도록 의도되지 않았습니다. JSON은 일반적으로 일부 데이터, 즉 게임의 설정을 유지하는 데 사용됩니다. 일부 메신저는 그것도 사용합니다 (적어도 API는)
  2. 무엇에 관한 것입니까? 좋은 점은 자체 프로토콜 (통신)에 약간의 단계가 있다는 것입니다. Bad : 당신이 전송하는 것은 노출 된 텍스트 (암호화가없고 체크섬이 없음)입니다. LAN 채팅의 일종에 이것을 사용할 수 있습니다
  3. 자신의 프로토콜을 만들고, Tcp로 전송하고, gzip을 사용하여 스트림을 압축하십시오.
  4. 그냥 암호화 된 것이 도움이되지 않습니다. 이 수신 된 메시지가 MITM이 아닌 채팅 파트너로부터 왔음을 증명하려면 체크섬을 계산하고 추가하고 암호화하여 보내야합니다. 개인 암호화에 대해 읽으십시오.