2011-12-01 19 views
18

Scenario di esempio: applicazione chat multiutente basata sul web tramite connessione websocket. Come posso garantire (o garantire) che ogni connessione in questa applicazione appartenga a determinati utenti autenticati e che "non possa essere" sfruttata da falsi tentativi di impersonificazione o intervento durante la connessione.Quali sono i modi possibili per autenticare l'utente quando viene utilizzata la connessione WebSocket?

dal modo in cui sto usando tornado websocket sul lato server per implementare la chat room di base e già facendo l'autenticazione per la parte non-websocket della mia app.

ps: supponiamo che l'utente autenticato pubblichi ciò che vuole e quando un altro utente apra la pagina di elenco dell'elemento e automaticamente l'altro utente venga aggiunto all'elenco degli ascoltatori websocket che cosa voglio che ciascun utente chatta con l'acquirente dell'oggetto singolarmente non in una chat room way ma con chat one to one

+0

Il decoratore @ tornado.web.authenticated funziona con i metodi di tornado.websocket.WebSocketHandler? – hymloth

+0

Potrebbe ma come ho già detto l'utente è già autenticato quando arriva alla parte web dell'applicazione e ho tutti i listener websocket all'interno di un elenco –

+0

è la chat StackOverflow che utilizza Websockets? – emaillenin

risposta

15

In primo luogo, ci sono due cose che bisogna ricordare su WebSockets: (a) si tratta di uno standard in evoluzione e (b) È stato progettato con l'intenzione di lavorare con i clienti non attendibili.

La cosa più grande e più importante che dovresti sempre fare con WebSockets è controllare la loro origine. Se l'origine non corrisponde, ovviamente non vuoi occuparti di quel cliente, quindi ignora le loro richieste. Inoltre, assicurati di utilizzare il protocollo WebSocket protetto "wss" anziché il protocollo "unssured" "ws". Ciò garantirà che i tuoi messaggi siano crittografati.

Il problema con questo, è che questa informazione può essere falsificata. Vedi this blog post per una rapida dimostrazione di ciò.

sicurezza Ulteriori:

  • Provare a inviare un gettone salata, averlo salato/hash e rimandato e validato in fase di stretta di mano.
  • Richieste di limite che si verificano troppo frequentemente (proprio come il protocollo IRC). Se l'utente ha inviato 10 righe o più nell'arco di un secondo, ignora tale utente.
  • Esegui un controllo rapido dello spam (ci sono molti algoritmi per questo): tieni conto dell'euristica leggera, altrimenti peserà il tuo server. Cose come la presenza delle parole "gratis" o "viagra". Dare all'utente un punteggio che rappresenti la probabilità che si tratti di spam o di un bot. Quando viene violato, avviarli dai server.

Spero che questo aiuti! Scusa se non è così. Questa è la mia risposta iniziale su StackOverflow. : P

Problemi correlati