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ę?

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.


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.


1
To naprawdę powinien być komentarz, ale nie masz jeszcze wystarczającej reputacji ...
Adam Zuckerman
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.