当前位置: 首页 > 知识库问答 >
问题:

防止基于长度的消息帧篡改?

葛承嗣
2023-03-14

对于我的基于TCP的网络应用程序,我使用基于长度的消息帧传输数据。很简单,一个数据包看起来是这样的:

[Length][Data]

Length是一个Int32,告诉我即将到来的原始数据的长度。

//Read Int
activePacketLength = (Int32)(bytes[0] | (bytes[1] << 8) | (bytes[2] << 16) | (bytes[3] << 24));
packetBuffer = new byte[activePacketLength]; //Create buffer
0xFF 0xFF 0xFF 0x7F 0x01 0x02 0x03 ... {and so on}

用这个来防止磨炼,有什么好办法呢?我可以实现一个大小限制(例如,每个数据包1MB,任何高于这个值的东西都将丢弃客户机并阻止它),但是有没有更多的“标准”解决方案,不会让人觉得那么讨厌呢?

共有1个答案

黎曾笑
2023-03-14

由于无法阻止客户端发送您认为无效的数据,因此必须检查数据是否无效。这包括将帧的长度(以及长度前缀的值)限制为非恶意客户端预期的最大大小。如果身份验证是协议的一部分,那么有两个限制就更好了:对未经身份验证的客户机设置一个小的限制,它只允许身份验证所需的帧大小,然后对经过身份验证的客户机设置一个较大的限制。

 类似资料:
  • JavaScript 共享的本质一直是开发人员心头的痛。因为任何对象都可以被在同一环境中运行的代码修改。开发人员很可能会意外地修改别人的代码,甚至更糟糕地,用不兼容的功能重写原生对象。ECMAScript 5 致力于解决这个问题,可以让开发人员定义防篡改对象(tamper-proof object)。第6章讨论了对象属性的问题,也讨论了如何手工设置每个属性的[[Configurable]]、[[W

  • 我有一些遗留代码需要修复,我正在努力解决以下问题: 我有2个嵌套的网格窗格。在内部网格内,必须添加文本。 使用以下函数计算相对于屏幕大小的内网格和外网格的列宽: 网格及其内容通过以下代码添加: 如果我向内部gridPane添加文本,如下所示: 当文本字符串太大而不能放入其单元格时,内网格以及与此内网格一起的外网格将会增长,从而导致整个网格(内网格和外网格)被“拉伸”以放入这些长内容,并在屏幕的右边

  • 下面是通常动态生成的内容。在页面的主要部分有一个< code > 为什么一个表可以变得比 宽?我一直认为,块元素采用其父元素的宽度? 表的相应 中的字符/空格数可能会有所不同。如何防止桌子长得比 div 宽?当然,我可以动态检查中的字符数,但是我如何处理这些信息? http://jsfiddle.net/vNnc6/ HTML:

  • 在我的wpf项目中,我使用以下代码更改鼠标光标: 我调度员。调用(New SetCursorCallback(SetCursor的地址),New Object(){Cursors.Wait}) 定义如下: 委托子SetCursorCallback(ByVal[CursorType]作为系统。Windows。输入。光标) 在一个处理按键的子程序中,我检查按下的键是否为删除键,如果为真,我使用消息框提

  • 我一直在努力解决RSA_verify的一个奇怪问题。我正在尝试使用C进行RSA签名,并使用C进行RSA验证。我已经使用OpenSSL命令生成了私钥和证书。 当我使用上面的消息,生成一个散列并使用RSA\u-sign对摘要进行签名时,我得到长度为256的签名(),并且RSA\u-sign返回的长度为256。我使用此长度进行验证,验证成功。 但是当我使用时,签名长度为60,RSA\u-sign返回25

  • 我有一个Netty4.x应用程序,它需要发送和接收ASCII消息,从一个固定长度(10位数,零填充)字段开始,包含以#字符为单位的消息大小。消息如下: