TsgcWebSocketServer_HTTPAPIWł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

Ten serwer działa na Windows HTTP Server API (http.sys). 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 i TsgcWebSocketHTTPServer. Aby ograniczyć tempo połączeń i tempo wiadomości, połącz ją z RateLimiter i Firewall.

Przykład


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;

Wróć do Właściwości