python - ¿Cuáles son las formas posibles de autenticar al usuario cuando se utiliza la conexión websocket?
authentication chat (3)
En primer lugar, hay dos cosas que debe recordar sobre WebSockets: (a) es un estándar en evolución y (b) está diseñado con la intención de trabajar con clientes que no son de confianza.
Lo más importante que siempre debes 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 utilizar el protocolo WebSocket protegido "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 falsificada. Vea esta publicación del blog para una demostración rápida de esto.
Seguridad adicional:
- Intente enviar un token salado, que se saltee / triture y se devuelva y valide en la fase de saludo.
- Limita las solicitudes que ocurren 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): respete la heurística de la luz, de lo contrario, será una carga para su servidor. Cosas como la presencia de las palabras "free" o "viagra". Déle al usuario una puntuación que represente la probabilidad de que sea spam o sea un bot. Cuando se rompe eso, arrancarlos desde los servidores.
¡Espero que ayude! Lo siento si no lo hace. Esta es mi primera respuesta en StackOverflow. :PAG
Escenario de ejemplo: aplicación de chat multiusuario basada en la web a través de la conexión websocket. ¿Cómo puedo asegurar (o garantizar) que cada conexión en esta aplicación pertenezca a cierto usuario autenticado y "no pueda ser" explotada por la falsa suplantación del usuario o intervenir durante la conexión?
por cierto, estoy usando tornado websocket en el lado del servidor para implementar la sala de chat básica y ya estoy haciendo autenticación para la parte que no es websocket de mi aplicación.
ps: supongamos que el usuario autenticado publica lo que quiere y cuando otro usuario abre la página de listado del artículo y automáticamente otro usuario se agrega a la lista de oyentes de websocket, lo que quiero que cada usuario pueda chatear con el comprador del artículo de forma individual, no de forma de sala de chat, sino con uno a uno chat
Este es el propósito de la conexión websocket. Se autentican mediante protocolo de apretón de manos. Para obtener más información, consulte aquí: http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-08
Estoy bastante seguro de que la conexión websocket envía las cookies que se han establecido en la conexión no websocket a su aplicación. Debería poder consultar en la tienda de sesión de Django la cookie de la conexión y determinar el usuario al que pertenece el socket.
Visite: https://docs.djangoproject.com/en/1.3/topics/http/sessions/#configuring-the-session-engine