Istnieje wiele różnych aspektów bezpieczeństwa WebSocket.
Fragment z wikipedii, który zacytowałeś, odnosi się do maskowania klienta WebSocket do danych serwera. Ma to na celu ochronę niewłaściwie działających pośredników (na przykład serwerów proxy i pamięci podręcznych) przed przypadkowym interpretowaniem ruchu WebSocket jako zwykłego ruchu HTTP. Niebezpieczeństwo polega na tym, że protokół WebSockets może zostać użyty do zatrucia pośrednika buforowania. Powinienem jednak zauważyć, że było to czysto teoretyczne zagadnienie, ale było dość obaw, że Mozilla i Opera niechętnie wysyłają Hixie i wczesne wersje HyBi protokołu WebSocket. Dlatego IETF zdecydował się dodać klienta do maskowania danych przez serwer w celu rozwiązania problemu.
Na marginesie, IETF odpowiada za protokół WebSocket (IETF 6455), natomiast W3C odpowiada za interfejs API HTML5 WebSocket (obiekt JavaScript, metody i zdarzenia).
Innym aspektem bezpieczeństwa WebSocket jest bezpieczeństwo krzyżowe. Drugi snippit cytowany ze specyfikacji W3C WebSocket API jest związany z zabezpieczeniami pochodzącymi z różnych źródeł. WebSockets obsługuje połączenia krzyżowe (do innego hosta, z którego pochodzi strona HTML). To ostrzeżenie mówi, że w przypadku WebSockets zastosowano normalne procedury krzyżowego HTTP dla HTTPS, co spowodowałoby ogromną lukę w zabezpieczeniach. Jednak procedura WebSocket różni się właśnie z tego powodu. Po pierwsze, uzgadnianie i odpowiedź WebSocket są zaprojektowane w taki sposób, aby połączenia WebSocket nie mogły być nawiązywane z serwerem HTTP, który nie obsługuje połączeń WebSocket: serwer musi podpisać/zaszyfrować klucz w specyficzny sposób przez WebSocket i zwrócić to w odpowiedzi uzgadniania. Druga część jest taka, że przeglądarka musi wysyłać nagłówek Origin jako część uzgadniania (wskazuje to, gdzie oryginalnie załadowano HTML/Javascript).Dzięki temu serwer może wybrać domeny, które pozwoli na pochodzić z połączeń sieciowych.
Wreszcie istnieją dwa tryby połączenia WebSocket: niezaszyfrowane (ws: //) i zaszyfrowane (wss: //). Tryb szyfrowania wykorzystuje szyfrowanie TLS/SSL w celu zaszyfrowania wszystkich danych wysłanych do i z serwera (w tym początkowego uzgadniania i odpowiedzi). Jest to ten sam mechanizm szyfrowania, który jest używany do połączeń HTTPS (i używa tego samego mechanizmu szyfrowania w przeglądarce). Zapobiega to podsłuchiwaniu przez osoby trzecie przekazywanych danych.
Istnieje naprawdę tylko dwie wersje protokołu websocket Ważne informacje:
Hixie76: Ta wersja protokołu dodaje zabezpieczeń granic pochodzenia i nagłówek mieszającego/podpisanie. Jednak ze względu na sposób zaprojektowania protokołu trudno jest dodać wsparcie dla istniejących serwerów sieciowych. To jest wersja obsługuje obecnie w iOS (miejmy nadzieję iOS 6 będzie ostatecznie aktualizację do IETF 6455)
IETF 6455: Jest to wersja protokołu websocket który został znormalizowany przez IETF listopada ubiegłego roku (listopad 2011). Było to zwieńczeniem prac grupy roboczej IETF HyBi (iteracje protokołu do niej poprzedzającego zostały oznaczone jako HyBi XX). Jest to wersja obsługiwana przez aktualne wersje Chrome i Firefox, a także przez IE 10 i wkrótce Opera.
WebSockets jak każdej innej formy komunikacji dziedziczą problemy związane z bezpieczeństwem transakcji zwykły tekst (poufność i integralność) – Adi
Aye - określenie „bezpieczne”. Tak bezpieczny, jak HTTPS, gdy korzystasz z HTTPS? Yeap. Erm, o ile nic nie pójdzie nie tak. –
Obawiam się, że nic nie jest bezpieczne. Zdefiniuj "bezpieczne" – kbec