2013-04-28 15 views
8

Buduję aplikację korzystającą z łączy internetowych. Pozwalam tylko uwierzytelnionym użytkownikom na otwieranie połączenia internetowego z serwerem po zalogowaniu i otrzymaniu identyfikatora sesji.Jakie są problemy bezpieczeństwa związane z otwartym połączeniem sieci Web?

  1. Raz otwarto połączenie websocket z uwierzytelnionego użytkownika, „strona” prąd następnie przechowuje szczegóły otwartym związku websocket. W tej chwili, czy to połączenie jest względnie bezpieczne? Czy naprawdę powinienem sprawdzać jakiś token w każdej wiadomości w moim własnym protokole na poziomie aplikacji, który pojawia się przez websocket?

  2. Czy są jakieś znane problemy związane z bezpieczeństwem typu "fałszerstwo między stronami"? Gdzie ktoś mógłby zagarnąć otwarty websocket, pozyskując uwierzytelnionego użytkownika, aby wykonać jakiś javascript w jakiś sposób - w wyniku czego można wykorzystać otwarte połączenie websocket?

Odpowiedz

4

1) Połączenie jest bezpieczne, gdy bezpieczne po stronie serwera. Musisz więc wysłać identyfikator sesji przez WebSockets, sprawdź po stronie serwera, czy jest poprawny i oznaczyć połączenie jako prawidłowe. Uwierzytelnianie jest trudniejsze z HTTP, ponieważ HTTP jest bezstanowy (w przeciwieństwie do surowego TCP). Oczywiście nadal można przejąć połączenie TCP, ale nie jest to takie proste (patrz na przykład this article), a jeśli tak się stanie, to nic nie pomoże (z wyjątkiem TLS).

2) Cóż, jeśli owinąć połączenia websocket z funkcji anonimowej tak:

(function() { 
    var ws = new WebSocket("ws://localhost:1000"); 
    // some other stuff 
})(); 

następnie bez zewnętrznego JavaScript będzie mógł uzyskać do niego dostęp, więc nie musisz się o to martwić.

+1

W odniesieniu do numeru 1 powyżej - tak, sprawdzam plik cookie w oryginalnym uzgodnieniu, ponieważ jest to żądanie HTTP GET, aby skonfigurować połączenie. Plik cookie musi mieć prawidłowy identyfikator sesji poprzez poprzednie uwierzytelnienie. Tak więc zapewniam bezpieczne połączenie ... po prostu nie było jasne, jakie luki mogą istnieć teraz, gdy połączenie to jest otwarte, a nie uwierzytelnianie każdej wiadomości ... – Rocketman

Powiązane problemy