Por ejemplo, veamos un sistema de inicio de sesión común para un sitio web
- Se realiza la conexión HTTPS
- El usuario envía las credenciales mediante POST
- El código del lado del servidor oculta la contraseña y busca si coincide con el nombre de usuario
- La sesión se inicializa y se puede emitir una clave para iniciar sesión nuevamente sin contraseñas ("recordarme")
Este es generalmente el status quo en este momento, donde todas las contraseñas se calculan en el servidor. Pero, si hacemos lo siguiente en el lado del cliente, se considera una mala práctica:
- Se realiza la conexión HTTPS
- JavaScript calcula el hash (puede solicitar sal de usuario específico)
- El script envía AJAX con los valores de usuario / hash
- El código del lado del servidor se ve si el hash de la contraseña y el nombre de usuario coinciden.
- La sesión se inicializa y se puede emitir una clave para iniciar sesión nuevamente sin contraseñas ("recordarme")
¿Puede alguien explicar por qué este otro método se considera una mala práctica para hacer CS en lugar de SS? Ambos transmiten a través de SSL, ambos crean el hash seguro, y ambos autenticados deben considerarse confiables con un código bien escrito. Ambos son susceptibles a XSS y otros malos diseños.