我写了一个 TCP 套接字程序,并定义了一个文本协议格式,如:“长度|内容”,
为简单起见,“长度”始终为 1 字节长,它定义了“内容”的字节数
我的问题是:
当攻击者发送像“1|a51”这样的数据包时,它会停留在tcp的接收缓冲区中,程序会解析错误,下一个数据包会像“5|1XXXX”一样开始,那么剩下的数据包都会被解析错了,</p>
如何解决这个问题呢?
我写了一个 TCP 套接字程序,并定义了一个文本协议格式,如:“长度|内容”,
为简单起见,“长度”始终为 1 字节长,它定义了“内容”的字节数
我的问题是:
当攻击者发送像“1|a51”这样的数据包时,它会停留在tcp的接收缓冲区中,程序会解析错误,下一个数据包会像“5|1XXXX”一样开始,那么剩下的数据包都会被解析错了,</p>
如何解决这个问题呢?
如果你得到垃圾,只需关闭连接。弄清楚它们的意思不是你的问题,如果有的话。
除了长度|内容之外,您还需要提供校验和,如果校验和不正确,您应该断开连接以避免部分接收。这是 tcp 协议中的一个典型问题,因为 tcp 是基于流的。但是就像http一样,它是tcp协议的一种应用,它具有请求/响应的结构,以确保连接的每一端都知道数据何时已完全传输。
但是您的情况有点棘手,因为黑客只能影响他自己的连接。虽然它不能更改来自其他连接的数据,但前提是他可以控制您的应用程序和用户之间的路由/切换器。