TsgcWebSocketServer_HTTPAPI › Eigenschappen › MaxMessageSize
Maximale grootte in bytes van een inkomend WebSocket-bericht; beschermt de server tegen geheugenuitputtingsaanvallen.
property MaxMessageSize: Int64 read FMaxMessageSize write FMaxMessageSize;
67108864 (64 MB). Gebruik 0 voor onbeperkt.
Deze server draait op de Windows HTTP Server API (http.sys). Een WebSocket-bericht heeft geen inherente groottelimiet, dus een kwaadwillende client kan op verschillende manieren proberen het servergeheugen uit te putten: door een enorme framelengte op te geven, een gefragmenteerd bericht nooit af te ronden (een eindeloze stroom van continuation-frames) of door een klein per-message-deflate-frame te sturen dat zich tot gigabytes opblaast (een “decompressiebom”). MaxMessageSize begrenst alle drie: de server weigert een frame waarvan de opgegeven lengte de limiet overschrijdt, begrenst de totale grootte van een opnieuw samengesteld gefragmenteerd bericht en breekt de decompressie af zodra de uitgepakte uitvoer de limiet bereikt. Wanneer de limiet wordt overschreden, wordt de verbinding gesloten met WebSocket-sluitcode 1009 (Message Too Big).
De standaardwaarde van 64 MB is veilig voor de overgrote meerderheid van toepassingen. Verhoog deze als uw toepassing legitiem grotere berichten uitwisselt, of verlaag deze om de geheugengrens op een publiek toegankelijke server aan te scherpen. Een waarde van 0 schakelt de limiet uit (niet aanbevolen voor servers die bereikbaar zijn vanaf niet-vertrouwde netwerken). Onafhankelijk van deze waarde wordt een 64-bits framelengte waarvan de hoogste bit is gezet altijd geweigerd als protocolfout, zodat de limiet niet kan worden omzeild door integer-overflow.
Dezelfde eigenschap is beschikbaar op TsgcWebSocketServer en TsgcWebSocketHTTPServer. Voor het beperken van verbindingssnelheid en berichtsnelheid combineert u deze met RateLimiter en 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;