La aplicación web en la que estoy trabajando tiene un 100% de seguridad SSL (o más bien, TLS como se llama hoy ...). La aplicación recientemente ha sido auditada por una empresa de seguridad. En general estoy de acuerdo con sus resultados, pero hubo una cosa que llevó a grandes debates:
Como parte del proceso de cambio de contraseña para los usuarios, el usuario debe proporcionar la contraseña antigua y la nueva dos veces, lo que no es inusual. Además, la nueva contraseña debe cumplir con una política de contraseña (longitud mínima, yadda yadda).
La aplicación se realiza con Vaadin, que utiliza pequeños mensajes AJAX para actualizar la interfaz de usuario. Toda la lógica de la aplicación reside en el servidor. Esto significa que toda la validación de la forma de cambio de contraseña ocurre en el servidor. Para validar el formulario, tanto la contraseña antigua como las dos nuevas (que deben coincidir, por supuesto) deben enviarse al servidor. Si hay algo incorrecto (la contraseña anterior es incorrecta, las nuevas contraseñas no coinciden, la nueva contraseña no se ajusta a la política de contraseñas), el usuario recibe un error. Desafortunadamente, como parte del proceso de sincronización, Vaadin envía nuevamente todos los datos del formulario al cliente, incluidas las contraseñas antiguas y nuevas.
Dado que todo esto sucede sobre SSL, nunca lo pensé dos veces, pero la empresa de seguridad lo vio como un riesgo de seguridad de la más alta gravedad. Tenga en cuenta que el problema a los ojos de la empresa de seguridad no fue que los datos se envían al servidor, sino que el servidor incluyó los datos en su respuesta en caso de que la validación fallara . Así que nuestra solución actual es vaciar todos los campos si falla la validación. Esto lleva a una experiencia de usuario deficiente, ya que el usuario debe completar tres campos de texto una y otra vez si, por ejemplo, las contraseñas no coinciden repetidamente con la política de contraseñas.
¿Estoy siendo ingenuo al pensar que esto está muy por encima? Quiero decir, si un atacante rompe el cifrado, tienen acceso a todo el tráfico de todos modos.
editar : con respecto a la navegación por los hombros, quiero dejar claro que ninguna contraseña se devolverá al usuario . Todos los campos de entrada son campos de contraseña adecuados que solo muestran marcadores de posición pero no caracteres reales.