TsgcWebSocketHTTPServer › Właściwości › StrictRequestParsing
Odrzuca niejednoznaczne żądania HTTP wykorzystywane w atakach typu request smuggling i stosuje bardziej rygorystyczną walidację kodowania chunked.
property StrictRequestParsing: Boolean read GetStrictRequestParsing write SetStrictRequestParsing;
True
Gdy StrictRequestParsing jest włączone, serwer odrzuca ze statusem HTTP 400 (Bad Request) każde żądanie HTTP zawierające JEDNOCZEŚNIE nagłówek Content-Length i Transfer-Encoding. Ta kombinacja jest niejednoznaczna co do tego, gdzie kończy się treść żądania, i stanowi podstawę ataków request smuggling (desync TE.CL / CL.TE), w których front-end proxy i back-end serwer nie zgadzają się co do granic żądań, a atakujący przemyca drugie żądanie obok proxy. Przy ścisłym parsowaniu serwer stosuje też bardziej rygorystyczną walidację kodowania transferu chunked, odrzucając nieprawidłowe rozmiary fragmentów (chunk) i nagłówki końcowe (trailery).
Ta właściwość jest domyślnie włączona i powinna pozostać włączona na każdym serwerze osiągalnym z niezaufanych sieci, zwłaszcza gdy znajduje się za reverse proxy lub load balancerem. Wyłącz ją tylko po to, aby zachować współdziałanie z niezgodnym klientem, który w uzasadniony sposób wysyła oba nagłówki.
oServer := TsgcWebSocketHTTPServer.Create(nil);
oServer.Port := 80;
// reject ambiguous Content-Length + Transfer-Encoding requests (HTTP 400)
oServer.StrictRequestParsing := true;
oServer.Active := true;