2012-06-21 20 views
36

wikipedia wydaje się wywodzi websockets są bezpieczne:są bezpieczne czy nie?

Dla wsparcia przeglądarki internetowej, bezpieczna wersja protokołu websocket jest zaimplementowana w Firefox 6 (nazwany MozWebSocket), [2] Google Chrome 14 [3] oraz Internet Explorer 10 Podgląd deweloperski. ... Chociaż nie są znane żadne exploity, został wyłączony w Firefoksie 4 i 5 ...

ale w3 stany są niepewne:

Postępując zgodnie z procedurami HTTP tutaj może wprowadzić poważne problemy bezpieczeństwa w Kontekst przeglądarki internetowej. Na przykład rozważ hosta z serwerem WebSocket przy jednej ścieżce i otwarty readresator HTTP w innym. Nagle, każdy skrypt, któremu można nadać konkretny adres URL WebSocket, można skłonić do komunikowania się (i potencjalnie dzielenia się sekretami) z dowolnym hostem w Internecie, nawet jeśli skrypt sprawdza, czy adres URL ma właściwą nazwę hosta.
  1. http websockets (WS :) bezpieczne czy nie?

  2. https websockets (wss :) bezpieczne czy nie?

  3. jeśli nie # 2, czy istnieją udokumentowane środki profilaktyczne?

+0

WebSockets jak każdej innej formy komunikacji dziedziczą problemy związane z bezpieczeństwem transakcji zwykły tekst (poufność i integralność) – Adi

+2

Aye - określenie „bezpieczne”. Tak bezpieczny, jak HTTPS, gdy korzystasz z HTTPS? Yeap. Erm, o ile nic nie pójdzie nie tak. –

+0

Obawiam się, że nic nie jest bezpieczne. Zdefiniuj "bezpieczne" – kbec

Odpowiedz

66

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.

9

Wersja hixie-76 protokołu WebSocket jest bezpieczniejsza niż wcześniejsze wersje, a wersja hybi-07 jest jeszcze bezpieczniejsza. W wersji hixie-76 dodano protection against fake requests. W wersji hybi-07 dodano message masking.

+0

świetne informacje! czy są one obecnie składane w 'websockets' na przykład za pomocą chrome i firefox? –

+0

Zobacz [stan wdrożenia] (http://en.wikipedia.org/wiki/Web_Sockets#Browser_support_2) w Wikipedii. –

+0

ma sens. rfc6455 to nagromadzenie poprzednich wersji. dzięki jeszcze raz! –

Powiązane problemy