¿Es más seguro crear una tabla que contenga información del usuario y otra para sus contraseñas que usar la misma tabla para todo?¿Usarías una o dos tablas para nombre de usuario y contraseña?
Respuesta
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.
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.
No, no puedo ver cómo eso puede hacerlo más seguro.
En realidad, debe abstenerse de almacenar contraseñas en absoluto. Solo almacena su hash salado.
Más información:
¡Gracias por el enlace! – expora
+1 Absolutamente, solo tiene que comparar los hash son iguales. –
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.
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
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.
¿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
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.)
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.
- 1. poner el nombre de usuario y la contraseña en una tabla o en varias tablas para cada tipo de usuario?
- 2. nombre de usuario y contraseña en sqlite3
- 3. ¿Suplantar con nombre de usuario y contraseña?
- 4. Cómo almacenar mejor la información de usuario y el nombre de usuario y la contraseña
- 5. Curl para solicitar un nombre de usuario y contraseña
- 6. Mismo nombre de índice para dos tablas
- 7. TeamCity Nombre de usuario/contraseña
- 8. Autenticación Shiro con sessionId o nombre de usuario + contraseña
- 9. Conexión a Oracle sin nombre de usuario o contraseña
- 10. Android: ¿Almacenamiento de nombre de usuario y contraseña?
- 11. Seguridad de nombre de usuario y contraseña de ASMX
- 12. Mercurial (HG) parámetros de extracción: nombre de usuario y contraseña
- 13. LDAP - ¿Cómo verificar una combinación de nombre de usuario/contraseña?
- 14. gvfs-mount especificar nombre de usuario contraseña
- 15. Salida diferente, mismo nombre de usuario y contraseña
- 16. Enviar nombre de usuario y contraseña al servicio web
- 17. Cómo usar AndroidHttpClient (nivel de API 8) y contraseña de contraseña de nombre de usuario?
- 18. ¿Utiliza cURL con nombre de usuario y contraseña?
- 19. Pasando nombre de usuario y contraseña a svcutil.exe?
- 20. Autenticación Java LDAP con nombre de usuario y contraseña
- 21. Servidor VisualSVN quiere un nombre de usuario y contraseña
- 22. Comprobando el nombre de usuario y la contraseña en Android
- 23. WCF TransportCredentialOnly no enviar nombre de usuario y contraseña
- 24. Nombre de usuario o ID para las claves en Redis
- 25. git clonar sobre https 401 error y no pedir nombre de usuario o contraseña
- 26. La mejor opción para almacenar nombre de usuario y contraseña en la aplicación de Android
- 27. Problemas con el nombre de usuario o pase con dos puntos al configurar CURLOPT_USERPWD
- 28. Seguridad más allá de un nombre de usuario/contraseña?
- 29. Cambiar nombre de usuario y contraseña en CouchDB _base de datos de usuario
- 30. Nombre de usuario no encontrado o mensaje de error de contraseña incorrecta demasiado vago
No olvide agregar la sal a la mesa, también. –
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
¡Gracias a todos! Soy consciente del hash salado. Me preguntaba si tener dos tablas agrega alguna característica de seguridad valiosa. ¡Salud! – expora