TsgcWebSocketServer_HTTPAPIプロパティ › MaxMessageSize

MaxMessageSize プロパティ

受信WebSocketメッセージの最大サイズ(バイト単位)。メモリ枯渇攻撃からサーバーを保護します。

構文

property MaxMessageSize: Int64 read FMaxMessageSize write FMaxMessageSize;

デフォルト値

67108864(64 MB)。無制限にするには0を使用します。

解説

このサーバーはWindows HTTP Server API(http.sys)上で動作します。WebSocketメッセージには固有のサイズ制限がないため、悪意のあるクライアントはいくつかの方法でサーバーのメモリを枯渇させようとする可能性があります。巨大なフレーム長を宣言する、フラグメント化されたメッセージを完了させない(終わりのない継続フレームのストリーム)、またはギガバイト単位に展開される小さなper-message-deflateフレームを送信する(「解凍爆弾」)などです。MaxMessageSizeはこれら3つすべてを制限します。サーバーは宣言された長さが制限を超えるフレームを拒否し、再構築されたフラグメント化メッセージの合計サイズを制限し、展開された出力が制限に達した時点で解凍を中止します。制限を超えると、接続はWebSocketクローズコード1009(Message Too Big)で閉じられます。

デフォルトの64 MBは大多数のアプリケーションにとって安全です。アプリケーションがより大きなメッセージを正当にやり取りする場合は引き上げ、外部公開サーバーでメモリ境界を厳しくする場合は引き下げてください。値0は制限を無効にします(信頼できないネットワークから到達可能なサーバーでは推奨されません)。この値とは独立して、上位ビットが設定された64ビットフレーム長は常にプロトコルエラーとして拒否されるため、整数オーバーフローによって制限を回避することはできません。

同じプロパティがTsgcWebSocketServerおよびTsgcWebSocketHTTPServerで利用可能です。接続レートおよびメッセージレートの制限には、RateLimiterおよびFirewallと組み合わせてください。

使用例


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

プロパティに戻る