TsgcWebSocketHTTPServerWłaściwości › MaxMessageSize

MaxMessageSize Właściwość

Maksymalny rozmiar w bajtach przychodzącej wiadomości WebSocket; chroni serwer przed atakami wyczerpującymi pamięć.

Składnia

property MaxMessageSize: Int64 read FMaxMessageSize write FMaxMessageSize;

Wartość domyślna

67108864 (64 MB). Użyj 0, aby uzyskać brak limitu.

Uwagi

Wiadomość WebSocket nie ma wbudowanego limitu rozmiaru, więc złośliwy klient może próbować wyczerpać pamięć serwera na kilka sposobów: deklarując ogromną długość ramki, nigdy nie kończąc pofragmentowanej wiadomości (niekończący się strumień ramek kontynuacji) lub wysyłając małą ramkę per-message-deflate, która po dekompresji rozrasta się do gigabajtów (tzw. „bomba dekompresyjna”). MaxMessageSize ogranicza wszystkie trzy przypadki: serwer odrzuca ramkę, której zadeklarowana długość przekracza limit, ogranicza łączny rozmiar ponownie składanej pofragmentowanej wiadomości oraz przerywa dekompresję, gdy rozpakowane dane osiągną limit. Po przekroczeniu limitu połączenie jest zamykane z kodem zamknięcia WebSocket 1009 (Message Too Big).

Domyślna wartość 64 MB jest bezpieczna dla zdecydowanej większości aplikacji. Zwiększ ją, jeśli aplikacja w uzasadniony sposób wymienia większe wiadomości, lub zmniejsz, aby zacieśnić ograniczenie pamięci na serwerze dostępnym publicznie. Wartość 0 wyłącza limit (niezalecane dla serwerów osiągalnych z niezaufanych sieci). Niezależnie od tej wartości, 64-bitowa długość ramki z ustawionym najwyższym bitem jest zawsze odrzucana jako błąd protokołu, więc limitu nie można obejść przez przepełnienie liczby całkowitej.

Ta sama właściwość jest dostępna w TsgcWebSocketServer oraz w serwerze http.sys TsgcWebSocketServer_HTTPAPI. Aby ograniczyć tempo połączeń i tempo wiadomości, połącz ją z RateLimiter i Firewall.

Przykład


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;

Wróć do Właściwości