TsgcWebSocketLoadBalancerServerProprietà › MaxMessageSize

MaxMessageSize Proprietà

Dimensione massima in byte di un messaggio WebSocket in ingresso; protegge il server dagli attacchi di esaurimento della memoria.

Sintassi

property MaxMessageSize: Int64 read FMaxMessageSize write FMaxMessageSize;

Valore predefinito

67108864 (64 MB). Utilizzare 0 per illimitato.

Note

Un messaggio WebSocket non ha un limite di dimensione intrinseco, quindi un client malevolo può tentare di esaurire la memoria del server in diversi modi: dichiarando una lunghezza di frame enorme, non completando mai un messaggio frammentato (un flusso infinito di frame di continuazione) oppure inviando un piccolo frame per-message-deflate che si espande fino a diversi gigabyte (una "bomba di decompressione"). MaxMessageSize limita tutti e tre i casi: il server rifiuta un frame la cui lunghezza dichiarata supera il limite, limita la dimensione totale di un messaggio frammentato riassemblato e interrompe la decompressione una volta che l'output espanso raggiunge il limite. Quando il limite viene superato la connessione viene chiusa con il codice di chiusura WebSocket 1009 (Message Too Big).

Il valore predefinito di 64 MB è sicuro per la stragrande maggioranza delle applicazioni. Aumentarlo se l'applicazione scambia legittimamente messaggi più grandi, oppure ridurlo per restringere il limite di memoria su un load balancer esposto pubblicamente. Un valore di 0 disabilita il limite (non consigliato per server raggiungibili da reti non attendibili). Indipendentemente da questo valore, una lunghezza di frame a 64 bit con il bit più significativo impostato viene sempre rifiutata come errore di protocollo, quindi il limite non può essere aggirato tramite overflow di interi.

La stessa proprietà è disponibile su TsgcWebSocketServer, TsgcWebSocketHTTPServer e sul server http.sys TsgcWebSocketServer_HTTPAPI. Per limitare la dimensione dei corpi delle richieste HTTP in ingresso vedere MaxRequestBodySize.

Esempio


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;

Torna alle Proprietà