TsgcWebSocketLoadBalancerServer › Özellikler › MaxMessageSize
Gelen bir WebSocket mesajının bayt cinsinden maksimum boyutu; sunucuyu bellek tüketme saldırılarından korur.
property MaxMessageSize: Int64 read FMaxMessageSize write FMaxMessageSize;
67108864 (64 MB). Sınırsız için 0 kullanın.
Bir WebSocket mesajının doğası gereği bir boyut sınırı yoktur, bu nedenle kötü niyetli bir istemci sunucu belleğini birkaç şekilde tüketmeye çalışabilir: çok büyük bir çerçeve uzunluğu bildirerek, parçalı bir mesajı asla bitirmeyerek (sonsuz bir devam çerçevesi akışı) veya gigabaytlara şişen küçük bir per-message-deflate çerçevesi göndererek (bir "açma bombası"). MaxMessageSize üçünü de sınırlar: sunucu, bildirilen uzunluğu sınırı aşan bir çerçeveyi reddeder, yeniden birleştirilen parçalı bir mesajın toplam boyutunu sınırlandırır ve şişen çıktı sınıra ulaştığında açma işlemini iptal eder. Sınır aşıldığında bağlantı, WebSocket kapatma kodu 1009 (Message Too Big) ile kapatılır.
64 MB varsayılanı uygulamaların büyük çoğunluğu için güvenlidir. Uygulamanız meşru olarak daha büyük mesajlar alıp gönderiyorsa bunu yükseltin veya internete açık bir yük dengeleyicide bellek sınırını sıkılaştırmak için düşürün. 0 değeri sınırı devre dışı bırakır (güvenilmeyen ağlardan erişilebilen sunucular için önerilmez). Bu değerden bağımsız olarak, en yüksek biti ayarlanmış 64 bitlik bir çerçeve uzunluğu her zaman bir protokol hatası olarak reddedilir, böylece sınır tamsayı taşmasıyla atlatılamaz.
Aynı özellik TsgcWebSocketServer, TsgcWebSocketHTTPServer ve http.sys sunucusu TsgcWebSocketServer_HTTPAPI üzerinde de mevcuttur. Gelen HTTP istek gövdelerinin boyutunu sınırlamak için MaxRequestBodySize'a bakınız.
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;