Foros del Web » Programando para Internet » Node.js »

Node , Socket.io protection

Estas en el tema de Node , Socket.io protection en el foro de Node.js en Foros del Web. Hola, Pues tengo una pregunta pues no puede encontrar un mejor método como proteger socket.io overflow - inundar los eventos.. Básicamente quiero proteger de clientes ...
  #1 (permalink)  
Antiguo 06/01/2015, 21:18
Avatar de utan  
Fecha de Ingreso: agosto-2012
Mensajes: 126
Antigüedad: 12 años, 4 meses
Puntos: 17
Node , Socket.io protection

Hola,

Pues tengo una pregunta pues no puede encontrar un mejor método como proteger socket.io overflow - inundar los eventos..

Básicamente quiero proteger de clientes maliciosos que inundan los eventos de Socket.io desde el cliente..

Ya que es Javascript este es editable en el browser sin necesidad de editar nada del lado del Server.. Nuestro gran amigo Chrome..

Alguien sabe de algún modulo que haga un throttle a los eventos?

Con un simple :

Código Javascript:
Ver original
  1. setInterval(function(){
  2.      client.emit('message' , { msg : 'Estoy inundando tu socket server.' });
  3.   }, 10 );

Si alguien no quiere discutir aquí como es echo esto sin editar la pagina ( Seguridad ) pueden mandar mensaje privado..

Gracias por su ayuda..
__________________
Mis conocimientos son limitado, pero si te puedo ayudar lo are gustoso mi chat particular, visitalo gracias http://rendezvouschat.com
  #2 (permalink)  
Antiguo 07/01/2015, 10:39
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 9 meses
Puntos: 1329
Respuesta: Node , Socket.io protection

Para eso programas un middleware con esa validación.

Saludos
__________________
Grupo Telegram Docker en Español
  #3 (permalink)  
Antiguo 07/01/2015, 18:14
Avatar de utan  
Fecha de Ingreso: agosto-2012
Mensajes: 126
Antigüedad: 12 años, 4 meses
Puntos: 17
Respuesta: Node , Socket.io protection

Hola,

Gracias por responder..

Eso no es el problema.. claro esta la autenticacion esta echo y todo.. sin embargo el agresor todavía identificándose podría hacer un loop y inundar tus eventos..


Podrías elaborar mas tu respuesta..

gracias..
__________________
Mis conocimientos son limitado, pero si te puedo ayudar lo are gustoso mi chat particular, visitalo gracias http://rendezvouschat.com
  #4 (permalink)  
Antiguo 08/01/2015, 14:50
Avatar de Djoaq  
Fecha de Ingreso: septiembre-2012
Ubicación: Barcelona
Mensajes: 271
Antigüedad: 12 años, 2 meses
Puntos: 38
Respuesta: Node , Socket.io protection

En mi opinión no afecta a node el tema del browser o del js que le lances al cliente.

Siempre estará expuesto el Javascript del cliente.

Hace poco hicimos un proyecto con esta tecnología y en mi opinión ,

Deberías controlar al máximo todas los usuarios que usan el sistema.

Una forma de controlarlo sería identificar y guardar en una matriz los clientes que te realizan previamente una petición por http , podrías recoger el user agent , la ip , el socket hash( si lo estas combinando con apache y php puedes pasar el id de session y añades también la session )

Luego una vez bien identificados a que socket's tienes asociados.

1 evitar sniffing es decir mantener la paridad de 1 hash ws->ip->UA->sessionID
Cada vez que entre un nuevo usuario comprobar esta relación , es decir si existe la misma ip o la misma Session con otro socket... denegar el servicio! algo raro esta pasando.

2 Todas las operaciones que realices desde node con sockets debes comprobar la veracidad y coherencia de esos datos a nivel lógico .

Por ejemplo si tu aplicación es un juego de futbol y los goles son de 1 en 1 compurebas el último valor y la diferencia respecto al nuevo valor que te envía debe ser 1 .. es decir que si yo en js en mi navegador hago var goles = 10 ; tu detectes que no es coherente y omitas la acción y a ese user ( o lo extraigas de alguna matriz de jugadores ).

En tu caso podrías incluso se me ocurre que jueges con la diferencia entre emit y emit de un usuario , de manera que cada vez que un user te envíe algo le hagas en el server una marca de tiempo ,redondeando esa cifra podrías comprobar si los envios tienen un intervalo de tiempo muy muy corto durante 4 envios si por ejemplo los 4 últimos envíos fueron constantes en el tiempo , es decir cada N ms y si es así sabes que ese usuario esta haciendote flood o saturandote el canal , si lo tienes bien identificado lo expulsas de tu matriz de usuarios activos en tu sistema.

No soy un experto en Node pero yo al menos personalmente intentaría plantearlo así.

Un saludo!

Última edición por Djoaq; 08/01/2015 a las 15:04
  #5 (permalink)  
Antiguo 08/01/2015, 15:59
Avatar de utan  
Fecha de Ingreso: agosto-2012
Mensajes: 126
Antigüedad: 12 años, 4 meses
Puntos: 17
Respuesta: Node , Socket.io protection

Hola,

Aprecio tu comentario, sin embargo aunque no fue explicito al citarlo los usuarios que se conectan están todos identificados Id, Ip , sin están en Proxy oh no..

A lo que me refiero es que el usuario ya identificado y todos su conexión validada puede con el Browser Chrome editar parte ya cargadas del Js que controla los eventos que se mandan a socket.io y Node y puede hacer un loop aun evento determinado.

Como es un Loop este hace que Node utilice la memoria disponible al Server or el CPU.

Y entendamos que estamos usando el Origin de Socket.io lo cual indica que determinados dominios pueden conectarse..
Asi que esta completamente explicado que el agresor no puede conectarse de otro dominio y editar el documento localment..

Lo que deseo es saber que hacen ustedes para detener el loop al evento , osea ya en el Server contrarrestar el loop y cortar la conexión agresora..

En el cliente no se puede evitar que alguien edite el JS y lo utilice para algo nefasto como loops ...

No se entienden lo que estoy tratando de explicar...

OH por cierto no puedes parar a alguien que se conecte con diferentes ips o que vanees el completo CDIR , ya que existen organizaciones como TOR que es utilizado para operaciones nefastas y o para propósitos útiles.

Cita:
Iniciado por Djoaq Ver Mensaje
En tu caso podrías incluso se me ocurre que jueges con la diferencia entre emit y emit de un usuario , de manera que cada vez que un user te envíe algo le hagas en el server una marca de tiempo ,redondeando esa cifra podrías comprobar si los envios tienen un intervalo de tiempo muy muy corto durante 4 envios si por ejemplo los 4 últimos envíos fueron constantes en el tiempo , es decir cada N ms y si es así sabes que ese usuario esta haciendote flood o saturandote el canal , si lo tienes bien identificado lo expulsas de tu matriz de usuarios activos en tu sistema.
Perdí el enfoque de tu respuesta hasta que la leí nuevamente. y esto es algo que e echo sin embargo, requiero algo mas completo, por eso es que quería saber si alguien utiliza algún modulo creado específicamente para esto.
__________________
Mis conocimientos son limitado, pero si te puedo ayudar lo are gustoso mi chat particular, visitalo gracias http://rendezvouschat.com

Última edición por utan; 08/01/2015 a las 16:05

Etiquetas: node, socket-io
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:15.