Czy maskowanie jest naprawdę konieczne podczas wysyłania z klienta Websocket

10

Obecna specyfikacja RFC Websocket wymaga, aby klienci Websocket maskowali wszystkie dane w ramkach podczas wysyłania (ale nie jest to wymagane od serwera). Powodem protokół został zaprojektowany w ten sposób jest zapobieganie dane ramki z zmiané złośliwych połączeń między klientem a serwerem (serwerami proxy, itp). Jednak klucz maskowania jest nadal znany takim usługom (jest wysyłany na podstawie pojedynczej ramki na początku każdej ramki)

Czy mylę się, zakładając, że takie usługi mogą nadal używać klucza do zdemaskowania, zmiany i ponownego maskowania zawartości przed przekazaniem ramki do następnego punktu? Jeśli się nie mylę, w jaki sposób to naprawia rzekomą lukę?

JSON
źródło

Odpowiedzi:

13

Sekcja 10.3 RFC wyjaśnia dokładnie, dlaczego wymagane jest maskowanie. Jest to bardzo specyficzna reakcja na określoną technikę hakowania. Problem, który próbuje rozwiązać, został opisany w artykule z 2010 r. Zatytułowanym Rozmowa z sobą dla zabawy i zysku przez jednych z najostrzejszych ludzi zajmujących się bezpieczeństwem transportu internetowego.

Protokół Websocket stosuje maskowanie klient-serwer, aby uniemożliwić serwerom proxy nieumyślne traktowanie danych WebSockets jako żądania HTTP przechowywanego w pamięci podręcznej. Możesz spierać się, czy to jest głupie dla głupich serwerów proxy (i myślę, że tak jest), ale to jest powód.

Ross Patterson
źródło
Tak, ale po pracy z ręką pełną usług Websocket (zarówno po stronie klienta, jak i serwera) wydaje mi się, że dobrze rozumiem protokół i nie widzę, jak proxy może zdemaskować i zmodyfikować ramki w locie. a) Klucz maskowania nie jest oparty na danych [takich jak skrót], b) klucz maskowania nie jest przewidywalny, więc człowiek w środku może zmienić dane i sam klucz, c) (wierzę) proxy może prawdopodobnie przekażą zupełnie nowe, niechciane ramki [odpowiednio zamaskowane i wszystkie], jako prawidłowy klient, gdy zostanie utworzona / dozwolona / przemycona ważna sesja klienta
JSON
Biorąc to pod uwagę, rozumiem również, że prawdopodobnie nie mam wiedzy i doświadczenia wielu członków ich zarządu, kiedy ta decyzja została podjęta.
JSON
3
Wygląda na to, że nie przeczytałeś tej sekcji lub dokumentu, do którego się odnosi. Maskowanie nie uniemożliwia serwerom proxy odczytu danych, lecz zapobiega nieświadomemu traktowaniu danych WebSockets jako żądania HTTP przechowywanego w pamięci podręcznej . Możesz spierać się, czy to jest głupie dla głupich serwerów proxy (i myślę, że tak jest), ale to jest powód.
Ross Patterson
+1 za wyjaśnienie. To wygląda na lepszą odpowiedź. Jeśli możesz przenieść edytuj swoją oryginalną odpowiedź, byłoby świetnie.
JSON
2

Maskowanie jest bezużyteczne w przypadku wss://WebSockets przez SSL / TLS. Ponieważ zaleca się stosowanie SSL / TLS, gdy tylko jest to możliwe, można rozsądnie stwierdzić, że maskowanie obejmuje marginalny przypadek użycia.

Laurent Caillette
źródło
1
To naprawdę powinien być komentarz, ale nie masz jeszcze wystarczającej reputacji ...
Adam Zuckerman