Es posible que un atacante no tenga que obtener acceso a su base de datos para obtener las contraseñas de sus usuarios.
Por diseño, los datos almacenados en una base de datos están separados por tablas. La información como nombres de usuario y contraseñas debe estar en una tabla diferente de los detalles del usuario como nombre y tal. Este es un diseño de esquema de base de datos básico.
Si un atacante compromete su aplicación utilizando técnicas como las inyecciones de SQL, es posible que solo puedan acceder a la tabla que contiene las contraseñas.
Incluso suponiendo que el atacante logre obtener acceso a toda su base de datos, hay otros factores a considerar. La información del usuario no es lo único importante en su aplicación. Si el atacante cambia la información en la base de datos directamente, lo más probable es que sus acciones se registren. Esto hace que sea relativamente fácil encontrar y corregir cualquier modificación no deseada.
Sin embargo, si el atacante inicia sesión en una cuenta de usuario a través de la página de inicio de sesión de su aplicación, sería difícil diferenciar lo que se pretende y el acceso no deseado. Podría causar mucho daño potencial.
Además, muchos usuarios utilizan las mismas combinaciones de nombre de usuario y contraseña en varios sitios. Si un atacante compromete la información de la cuenta en su sitio, podría acceder a todas las demás cuentas en línea del usuario. Esto es malo.
Siempre hash tus contraseñas.