TsgcWebSocketHTTPServer › Propiedades › MaxMessageSize
Tamaño máximo en bytes de un mensaje WebSocket entrante; protege al servidor frente a ataques de agotamiento de memoria.
property MaxMessageSize: Int64 read FMaxMessageSize write FMaxMessageSize;
67108864 (64 MB). Utilice 0 para ilimitado.
Un mensaje WebSocket no tiene un límite de tamaño inherente, por lo que un cliente malicioso puede intentar agotar la memoria del servidor de varias formas: declarando una longitud de trama enorme, no finalizando nunca un mensaje fragmentado (un flujo interminable de tramas de continuación) o enviando una pequeña trama per-message-deflate que se infla hasta alcanzar gigabytes (una «bomba de descompresión»). MaxMessageSize acota las tres situaciones: el servidor rechaza una trama cuya longitud declarada supera el límite, limita el tamaño total de un mensaje fragmentado reensamblado y aborta la descompresión en cuanto la salida inflada alcanza el límite. Cuando se supera el límite, la conexión se cierra con el código de cierre WebSocket 1009 (Message Too Big).
El valor predeterminado de 64 MB es seguro para la inmensa mayoría de las aplicaciones. Auméntelo si su aplicación intercambia legítimamente mensajes más grandes, o redúzcalo para reforzar el límite de memoria en un servidor expuesto al público. Un valor de 0 deshabilita el límite (no recomendado para servidores accesibles desde redes no confiables). Independientemente de este valor, una longitud de trama de 64 bits con el bit más alto activado siempre se rechaza como un error de protocolo, por lo que el límite no puede eludirse mediante desbordamiento de enteros.
La misma propiedad está disponible en TsgcWebSocketServer y el servidor http.sys TsgcWebSocketServer_HTTPAPI. Para limitar la tasa de conexiones y la tasa de mensajes, combínela con RateLimiter y Firewall.
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;