TsgcWebSocketHTTPServer属性 › MaxMessageSize

MaxMessageSize 属性

入站 WebSocket 消息的最大字节大小;保护服务器免受内存耗尽攻击。

语法

property MaxMessageSize: Int64 read FMaxMessageSize write FMaxMessageSize;

默认值

67108864(64 MB)。使用 0 表示无限制。

备注

WebSocket 消息没有固有的大小限制,因此恶意客户端可以尝试以多种方式耗尽服务器内存:声明一个巨大的帧长度、永远不结束一个分片消息(无尽的连续帧流),或发送一个小的 per-message-deflate 帧,使其膨胀到数 GB(“解压缩炸弹”)。MaxMessageSize 对这三种情况都进行限制:服务器会拒绝声明长度超过该限制的帧,限制重组后分片消息的总大小,并在膨胀后的输出达到该限制时中止解压缩。当超过该限制时,连接将以 WebSocket 关闭代码 1009(消息过大)关闭。

默认值 64 MB 对绝大多数应用程序而言都是安全的。如果您的应用程序确实需要交换更大的消息,可以调高该值;或者在面向公网的服务器上调低该值以收紧内存限制。值为 0 会禁用该限制(不建议在可从不受信任网络访问的服务器上使用)。无论该值如何,设置了高位的 64 位帧长度始终会作为协议错误被拒绝,因此无法通过整数溢出绕过该限制。

TsgcWebSocketServer 和 http.sys 服务器 TsgcWebSocketServer_HTTPAPI 上提供相同的属性。要进行连接速率和消息速率限制,请将其与 RateLimiterFirewall 结合使用。

示例


oServer := TsgcWebSocketHTTPServer.Create(nil);
oServer.Port := 80;
// accept messages up to 16 MB, close 1009 on anything larger
oServer.MaxMessageSize := 16 * 1024 * 1024;
oServer.Active := true;

返回属性