我写了一个TCP套接字程序,并定义了一个文本协议格式,如:“length | content”,
为简单起见,“length”总是1字节长,它定义了“content”的字节数
我的问题是:
当攻击者发送“1 | a51”之类的数据包时,它将保留在tcp的接收缓冲区中 程序将解析错误,下一个数据包将像“5 | 1XXXX”一样启动, 然后其余的数据包保留在缓冲区中将全部解析错误,
如何解决这个问题?
答案 0 :(得分:1)
如果你得到垃圾,只需关闭连接即可。如果有的话,弄清楚它们的含义并不是你的问题。
答案 1 :(得分:-1)
而不是length | content,你还需要提供校验和,如果校验和不正确,你应该删除连接以避免部分接收。 这是tcp协议中的典型问题,因为tcp是基于流的。但就像http,它是tcp协议的应用程序一样,它有一个请求/响应结构,以确保连接的每一端都知道数据何时被完全传输。
但是你的场景有点棘手,因为黑客只会影响他自己的连接。虽然它无法改变其他连接的数据,但只有他可以控制你的应用程序和用户之间的路由/切换器。