sql >> Base de Datos >  >> RDS >> Mysql

¿Por qué mysqli_connect() debe recibir el parámetro de contraseña sin encriptación?

Usted, como usuario, no sabe cómo se encripta la contraseña (en realidad no está encriptada en absoluto, sino con hash).

Simplemente pasa la contraseña y MySQL puede realizar el mismo hash que en la contraseña original y compararla con lo que está almacenado. Si pasa la versión hash, todo el beneficio de hashing desaparece:si alguien obtiene los hash del servidor, puede usarlos para iniciar sesión como si fueran contraseñas normales. El hash se ha convertido entonces en la contraseña.

El beneficio adicional es que MySQL, debido a que tiene la contraseña original, podría volver a codificarla con un algoritmo mejor, agregar un poco de sal y almacenar esa versión mejorada. Si nunca obtiene el original, eso no se puede hacer. Funciones de contraseña de PHP apoyar esto también. Puedes consultar con password_needs_rehash si una contraseña codificada aún tiene el algoritmo hash correctamente, y actualice su base de datos si no es así.

Entonces, por seguridad, deberá tomar otras medidas. Estos son al menos:

  • Almacene la contraseña en un archivo de inclusión que se encuentre fuera de la raíz del documento. De esa manera, nadie puede abrir ese archivo directamente.
  • Puede evitar que los archivos de inclusión se abran sin estar incluidos (por ejemplo, comprobando una definición que se configuró en index.php). Eso está bien, pero si PHP falla debido a un error de configuración, la gente puede buscar el código fuente del archivo, así que siga la regla anterior.
  • Haga siempre un usuario de base de datos especial. No use root . Otorgue a este usuario el derecho suficiente para operar la base de datos, pero no más. Sin derechos para descartar mesas, por ejemplo.
  • Dé siempre a ese usuario una contraseña única. No tienes que recordar esta contraseña. Solo genera basura aleatoria con muchos caracteres.
  • Cambie la contraseña periódicamente. Tal vez incluso podría escribir eso y almacenar la contraseña actualizada en la configuración.