2010-04-28 11 views

Respuesta

7

No Me acaba de hacer esto:

ID, nombre de usuario, contraseña.

Donde id es solo autoincrement, el nombre de usuario es un varchar de 20 (más o menos, dependiendo de sus necesidades) y la contraseña es una contraseña hash MD5 o SHA1 con un salt.

Usar dos tablas para esto simplemente no tiene sentido. Entonces necesitas trabajar con combinaciones para obtener los datos. Y eso es solo una carga innecesaria.

+3

No olvide agregar la sal a la mesa, también. –

+2

No necesariamente tiene que hacer eso. Puedes usar una sal por cada contraseña. Si la base de datos está pirateada, no tienen la sal. Si lo agrega a la base de datos lo hacen. La idea de una sal es solo que el usuario final no tiene el control final sobre el hash resultante. – Snake

+0

¡Gracias a todos! Soy consciente del hash salado. Me preguntaba si tener dos tablas agrega alguna característica de seguridad valiosa. ¡Salud! – expora

0

No, no es más seguro. Solo asegúrate de que tus contraseñas tengan Salted + Hashed antes de almacenarlas en la base de datos.

0

No. No a menos que cada mesa requiere una cuenta de usuario diferente para acceder a ella - lo que haría que la consulta es un dolor completa - y aún así, el hacker ha resuelto un inicio de sesión, por lo que es probable que puedan obtener el otro.

Solo asegúrese de almacenar contraseñas en forma de hash, utilizando un hash seguro como SHA-2 y una sal. No los guarde en texto plano y (en mi humilde opinión) no los almacene encriptados.

+0

Gracias Adam. Estaba en esa longitud de onda mientras pensaba en esto: ¿el hacker tendría acceso a todo? Supongo que se me ocurrió al aprender un poco sobre Unix y archivos como/etc/passwd y/etc/shadow. Después de leer las respuestas a mi pregunta, quedó claro que esta idea no ayuda en una aplicación web (sin mencionar que el caso de Unix tiene un historial). – expora

1

No estoy de acuerdo con otras personas: coloque la información de autenticación en una tabla separada y en la medida de lo posible extraiga completamente la autenticación de su aplicación. No deberías preocuparte. Piense en SiteMinder y similares: su aplicación web no tiene ninguna información sobre cómo se autentica el usuario. Contraseña, tarjeta inteligente, etc. (Lo mismo con Kerberos o Active Directory en aplicaciones de escritorio).

Este enfoque incluso funciona si utiliza un marco como Spring Security. Simplemente configure su interceptor para que vea solo las tablas de autenticación. Incluso podría usar DataSources separados para que su interceptor no pueda ver los datos de la aplicación o viceversa.

Obviamente, su aplicación aún necesitará administrar información sobre las autorizaciones del usuario, algo que generalmente se maneja en una tabla de "roles". Pero no es necesario que sepa cómo se autenticó al usuario.

+0

¿De qué manera el almacenamiento de nombres de usuario y contraseñas en una tabla separada tendría algún efecto sobre si la aplicación maneja la autenticación o no? – Matthew

0

Por cierto, ya existe una biblioteca de clases de hash C# salada bastante simple (y potente) (también han incluido una pequeña demostración de cómo usar la biblioteca) por ahí - Link.

También proporciona un mecanismo de verificación (para que pueda verificar la entrada del usuario como una contraseña válida) y se puede elegir el algoritmo hash a sí mismo (SHA1/MD5/etc.)

0

No hay ningún beneficio de seguridad, pero el uso de varias tablas puede ser útil para almacenar credenciales en múltiples sistemas vinculados a un único inicio de sesión.

Como se mencionó anteriormente, la seguridad debe proporcionarse con hash salado para las contraseñas.

Cuestiones relacionadas