适当的客户< - >服务器通信

时间:2016-08-31 08:16:04

标签: c# server client client-server communication

假设我有一个客户端和一个服务器用于一个简单的聊天室。

他们通过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. 如果这恰好是一家大公司的聊天服务器,并且密码不是以纯文本形式存储,而是使用私钥和公钥,那还有什么是一个很大的安全漏洞呢?
  5. 我在问,因为我找到了很多关于客户端和服务器进行通信的好方式,但没有找到来回发送的实际内容

    提前谢谢!

1 个答案:

答案 0 :(得分:0)

正如你所说,这不是很安全。一些MITM可以破解连接,发送它的owm命令。所以为了使这个安全,你应该尝试进行一些symetric / asymetric加密来保护内容并使用校验和以避免伪造消息

回答你的问题:

  1. JSON的开销比XML少,但JSON itselfe并不打算用作通信协议。 JSON通常用于存储一些数据,即游戏中的配置......某些信使也使用它们(至少是API)
  2. 关于什么?好消息是,自己的协议(通信)有一些小步骤。坏:你传输的是裸文本(没有加密,没有校验和)。您可以将其用于某种LAN聊天
  3. 制作自己的协议1,通过Tcp传输,使用gzip压缩流
  4. 刚刚加密对你没有帮助。要证明此收到的邮件来自您的聊天伙伴,而不是来自MITM,您必须计算校验和,附加,加密并发送。请阅读有关私有加密的内容