¿Usar GET para enviar un nombre de usuario / contraseña? [duplicar]

4

Por lo que entiendo, usar GET para enviar nombres de usuario / contraseñas es un problema de seguridad porque el nombre de usuario / contraseña son parte de la URL que puede aparecer en el historial del navegador.

¿Esto sigue siendo un problema si la solicitud GET de inicio de sesión se realiza utilizando AJAX?

    
pregunta Abe Miessler 07.10.2013 - 18:29
fuente

3 respuestas

6
  

Por lo que entiendo, usar GET para enviar nombres de usuario / contraseñas es un problema de seguridad porque el nombre de usuario / contraseña son parte de la URL que puede aparecer en el historial del navegador.

Ese no es el único problema. El uso de GET para situaciones donde el usuario está enviando datos abre su aplicación a las vulnerabilidades CSRF .

Por ejemplo, podría insertar <img src="http://yoursite.com/login?username=something&password=somethingelse"> , lo que puede registrar a los visitantes en mi fuera de su sitio debido a la llamada al controlador de inicio de sesión. Este ejemplo específico depende de la implementación, pero se pueden realizar otros ataques. Puede haber casos en que un atacante quiera que los usuarios inicien sesión en su cuenta.

Además de eso, otros registradores en camino (su ISP, etc.) pueden registrar esto por un período de tiempo prolongado. Por supuesto, se puede decir lo mismo acerca de la solicitud POST, pero por lo general no se mantendrán los datos completos de solicitud por mucho tiempo.

    
respondido por el Manishearth 07.10.2013 - 18:45
fuente
2

Sí, definitivamente sigue siendo un problema. El historial del navegador no es el único lugar donde se pueden registrar los parámetros de la URL, pero es probable que el servidor los registre y los proxies intermedios también los registren.

Los datos confidenciales, como las credenciales de los usuarios, deben PUNTARSE como datos de formulario, no deben pasarse en la cadena de consulta.

    
respondido por el Xander 07.10.2013 - 18:38
fuente
1

Las solicitudes GET (según la definición del protocolo) deben ser " idempotent ", que significa sin efectos secundarios. En este caso, cambiar el estado de su sesión a "conectado" en lugar de "no iniciar sesión" es un ejemplo de un efecto secundario.

Gran parte de la forma en que funcionan los navegadores, servidores y servidores proxy dependen de este principio de que los GET no tienen ningún efecto secundario, por lo que violar este principio significa que podría tener problemas difíciles de diagnosticar en el futuro.

Siempre usa POST cuando lo que estás haciendo cambia el estado de algo, incluso si en realidad no tienes datos para POST. Solo hazlo.

    
respondido por el tylerl 07.10.2013 - 20:17
fuente

Lea otras preguntas en las etiquetas