TsgcWebSocketLoadBalancerServerPropriétés › MaxMessageSize

MaxMessageSize Propriété

Taille maximale en octets d'un message WebSocket entrant ; protège le serveur des attaques par épuisement de mémoire.

Syntaxe

property MaxMessageSize: Int64 read FMaxMessageSize write FMaxMessageSize;

Valeur par défaut

67108864 (64 Mo). Utilisez 0 pour illimité.

Remarques

Un message WebSocket n'a pas de limite de taille intrinsèque, de sorte qu'un client malveillant peut tenter d'épuiser la mémoire du serveur de plusieurs manières : en déclarant une longueur de trame énorme, en ne terminant jamais un message fragmenté (un flux sans fin de trames de continuation) ou en envoyant une petite trame per-message-deflate qui se décompresse en gigaoctets (une « bombe de décompression »). MaxMessageSize borne les trois cas : le serveur rejette une trame dont la longueur déclarée dépasse la limite, plafonne la taille totale d'un message fragmenté réassemblé et interrompt la décompression dès que la sortie décompressée atteint la limite. Lorsque la limite est dépassée, la connexion est fermée avec le code de fermeture WebSocket 1009 (Message Too Big).

La valeur par défaut de 64 Mo est sûre pour la grande majorité des applications. Augmentez-la si votre application échange légitimement des messages plus volumineux, ou réduisez-la pour resserrer la limite mémoire sur un équilibreur de charge exposé publiquement. Une valeur de 0 désactive la limite (déconseillé pour les serveurs accessibles depuis des réseaux non fiables). Indépendamment de cette valeur, une longueur de trame 64 bits dont le bit de poids fort est positionné est toujours rejetée comme erreur de protocole, de sorte que la limite ne peut pas être contournée par dépassement d'entier.

La même propriété est disponible sur TsgcWebSocketServer, TsgcWebSocketHTTPServer et le serveur http.sys TsgcWebSocketServer_HTTPAPI. Pour borner la taille des corps de requêtes HTTP entrantes, voir MaxRequestBodySize.

Exemple


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

Retour aux propriétés