¿Está usando password_verify ($ password, “”) para bloquear el acceso a una cuenta de manera segura?

1

Estamos migrando un sitio web antiguo, que usaba el hashing de contraseña bastante antiguo para la nueva función de verificación de contraseña de php. El método antiguo usaba un hash antiguo, y nos gustaría usar password_verify en lugar del método antiguo; solo se utilizaba un hash y se almacenaba una sal. El algoritmo hash antiguo estaba desactualizado, por lo que no queremos convertir el hash antiguo a la estructura password_verify (lo que podría ser posible).

En cambio, bloquearemos el acceso y requeriremos que un usuario restablezca su contraseña antes de continuar.

Pregunta

¿Podemos establecer el hash utilizado en password_verify en "" (cadena vacía) para bloquear el acceso a la cuenta?

    
pregunta user23127 23.01.2017 - 11:14
fuente

2 respuestas

1

Desde la vista de hashing puro, sí, es seguro. La nueva verificación de contraseña usa bcrypt o blowfish para cifrar la contraseña, en ninguno de los casos se podría convertir en una cadena vacía con una contraseña difícil.

Sin embargo, hay otras vistas que podría considerar.

En primer lugar, la seguridad no se trata solo de cerrar las posibilidades de ataque conocidas, sino también de eliminar cualquier cosa desconocida actualmente. Esto es realmente difícil. La defensa es fácil contra cualquier cosa que sepas.

Segundo, un código seguro también debe ser fácil de entender, para evitar la aparición de secholes por parte de múltiples programadores que no saben que los demás funcionan lo suficientemente bien. Me gustaría mencionar la raíz remota ssh sechole de hace algunos años (aunque en este caso existe la posibilidad de que fuera un ataque intencionado).

En mi opinión, haría mejor su tarea si de alguna manera usted claramente iniciara en su base de datos que una cuenta está cerrada debido a la actualización del algoritmo, y no por alguna otra razón, y su código de inicio de sesión / autenticación debería manejar esto específicamente caso. Esto es lo que debe hacer incluso en el caso si conduce a un código aparentemente redundante.

    
respondido por el peterh 23.01.2017 - 16:11
fuente
0

Mi solución para este problema fue: No es necesario obligar al usuario a restablecer su contraseña. Simplemente actualice su código php para seguir actualizando la contraseña con un nuevo hash con cada intento de inicio de sesión para cada usuario.

No elimines el algoritmo hash antiguo para verificar. Solo verifica la contraseña con ambos algoritmos. Si la contraseña se verifica con alguno de estos algoritmos, deje que el usuario inicie sesión pero antes de eso, verifique qué algoritmo funcionó para ese usuario. Si el algoritmo antiguo funcionó para iniciar sesión, eso significa que esta contraseña se creó con el algoritmo hash antiguo, por lo que en esa etapa la contraseña del usuario hash con el nuevo algoritmo hash y la actualización en la base de datos.

De esta forma, la base de datos mantendría sus contraseñas actualizadas automáticamente con la ayuda de su código php con un nuevo algoritmo hash.

Por lo tanto, en cada evento de inicio de sesión, la contraseña se cambiará a un nuevo algoritmo hash automáticamente y no será necesario obligar al usuario a restablecer su contraseña.

    
respondido por el Ayyaz Zafar 25.01.2017 - 15:08
fuente

Lea otras preguntas en las etiquetas