是一个TCP套接字安全或应该我总是检查用户

我有一个C ++应用程序,通过TCP套接字连接到nodeJS服务器。 在套接字“握手”中,客户端使用服务器已知的UUID进行身份validation,然后服务器将该帐户关联到此识别的UUID

一旦TCP套接字打开,应用程序发送请求,服务器通过相同的套接字回答。

是否有必要为每个请求添encryption码以确保请求来自客户端? 或者是一个sockets应该到位并保持原位?

所以我应该确定客户是客户:

  • 只有打开sockets?
  • 每次提出请求?

服务器已知的UUID通常称为令牌。 它可以用于你的场景。 然而,它永远不应该被encryption。 你需要确保以下内容:

  • 外部方(不是通信的两个成员之一)不应该能够读取令牌。
  • 客户端不应连接到除您的服务器之外的任何内容。

这通常是使用TLS完成的。 (这是什么使HTTPS安全。)

我build议你对基于令牌的authentication/授权和TLS / SSL做一些研究。

最后一个build议是:不要自己实现encryption代码,而是使用一个使用良好的库,因此有很多的testing和良好的维护。

不,这不是“安全”的。 你的计划很容易,就在我头顶,重播攻击,中间人攻击,窃听,随后的冒充…

套接字不像实际的物理pipe道或隧道。 套接字只是一个协议,用特定的源和目标端口对(这些只是数字)标记的数据将被视为属于特定的逻辑数据通道。 这是由握手和信任决定的。 没有validation。

你特别要问的是,是否存在中间人攻击。 是的,是的。

是否需要在每个数据包中给出一个密码来解决这个问题? 不,不会的 拦截然后重播将是微不足道的。 你只是把这个人放在口令的中间。

这就是为什么人们使用encryption和其他聪明的安全计划。 如果您担心消息的真实性和完整性,则需要在通信安全原则方面有基本的基础; 提供一个超出了这个答案的范围。