2011-12-01 12 views
18

Escenario de ejemplo: aplicación de chat multiusuario basada en web a través de conexión websocket. ¿Cómo puedo garantizar (o garantizar) que cada conexión en esta aplicación pertenece a cierto usuario autenticado y "no se puede" explotar mediante suplantación de usuarios falsos o intervenir durante la conexión?¿Cuáles son las formas posibles de autenticar al usuario cuando se usa la conexión websocket?

por cierto Estoy usando tornado websocket en el lado del servidor para implementar la sala de chat básica y ya estoy autenticando la parte que no es de websocket de mi aplicación.

ps: supongamos que las entradas autenticadas del usuario lo que quiere y cuando otro usuario abre la página del elemento y automáticamente se agrega otro usuario a la lista de oyentes websocket lo que quiero que cada usuario pueda chatear con el comprador del artículo individualmente no en una sala de chat pero con chat uno a uno

+0

¿El decorador @ tornado.web.authenticated funciona con los métodos de tornado.websocket.WebSocketHandler? – hymloth

+0

Podría, pero como dije el usuario ya está autenticado cuando se trata de websocket parte de la aplicación y tengo todos los oyentes websocket dentro de una lista –

+0

es el chat StackOverflow utilizando Websockets? – emaillenin

Respuesta

15

En primer lugar, hay dos cosas que debe recordar acerca de WebSockets: (a) Es un estándar en evolución y (b) que está diseñado con la intención de trabajar con los clientes no son de confianza.

Lo más importante y más importante que siempre debe hacer con WebSockets es verificar su origen. Si el origen no coincide, obviamente no desea tratar con ese cliente, por lo tanto, ignore sus solicitudes. Además, asegúrese de estar utilizando el protocolo WebSocket seguro "wss" en lugar del protocolo no seguro "ws". Esto asegurará que sus mensajes estén encriptados.

El problema con solo hacer esto, es que esta información puede ser falsa. Ver this blog post para una demostración rápida de esto.

Seguridad adicional:

  • Intente enviar una ficha con sal, teniendo que salado/hash y enviado de vuelta y validado en la fase de apretón de manos.
  • Limite las solicitudes que suceden con demasiada frecuencia (al igual que el protocolo IRC). Si el usuario ha enviado 10 líneas o más en el lapso de un segundo, ignore a ese usuario.
  • Realice una rápida comprobación de correo no deseado (hay muchos algoritmos para esto): manténgase alejado de la heurística ligera; de lo contrario, será una carga para su servidor. Cosas como la presencia de las palabras "gratis" o "viagra". Bríndele al usuario una puntuación que represente la probabilidad de que esté enviando spam o sea un bot. Cuando se incumple, reinícielos desde los servidores.

Espero que ayude! Lo siento si no es así. Esta es mi primera respuesta en StackOverflow. : P

Cuestiones relacionadas