texto - PHP Olvidó la Función de Contraseña
string strip_tags (12)
Tengo un pequeño sitio web de la comunidad y necesito implementar algún tipo de función de contraseña olvidada. Actualmente almaceno las contraseñas en el DB, encriptadas con MD5
.
¿Es posible ordenar ''descifrar'' y enviarlo al usuario por correo electrónico o debería tener una página de restablecimiento de contraseña?
Como dijo Marcus Reed, en 2015/2016 si tiene una versión de PHP> = 5.5 no use MD5, password_hash () y password_verify () proporcionan un hashing fácil y seguro para su contraseña con la capacidad de proporcionar un costo y automáticamente salda el picadillo.
No tengo la capacidad de votar o comentar en la actualidad, por lo que proporciono una declaración definitiva para evitar confusiones.
Escriba una página que acepte el md5 y la dirección de correo electrónico como un formulario de obtención y busque en el archivo base el correo electrónico y la contraseña md5''d. Siguiendo las notas de Jared Cobb, eso debería llevarlo por el camino correcto. Acabo de agregar algunos ejemplos también
por ejemplo url para enviar http://yourdomain.com/resetpassword.php?code=md5codesentviaemail
$code = isset($_GET[''code'']) ? $_GET[''code''] : '''';
$email = isset($_GET[''email'']) ? $_GET[''email''] : '''';
$checkPw = '''';
if(empty($code) || empty($email))
{
die();
}
$sqlQuery = ''SELECT * FROM users WHERE email = "''.$email.''";
//remember to check for sql injections
//then get the results as an array, i use a database class eg $user
if(!empty($user[''password'']))
{
$checkPw = md5($user[''password'']);
}else
{
die();
}
if($checkPw !== $code)
{
die();
}else
{
//display form for user to change password
}
esto debería ser suficiente para que sepa que el usuario es un usuario válido y cambie su contraseña
Lo mejor que puede hacer es solicitar a las personas que envíen su dirección de correo electrónico cuando se registren. Luego, si lo olvidan, tienen un enlace de contraseña olvidada que restablece su contraseña con un valor aleatorio que se les envía por correo electrónico para que puedan obtener acceso y luego cambiar su contraseña a algo más memorable. De esta forma, no es necesario comprometer la seguridad. Podrías tener un enlace al que solo tienen que enviar su nombre de usuario, pero para mayor seguridad debes tener una pregunta y respuesta o una palabra memorable.
MD5 está destinado a ser un hash de un solo sentido. Tendrá que hacer que restablezca su contraseña.
No puede descifrar la contraseña y ni siquiera debería considerar enviar una contraseña a un usuario a través de texto sin formato. (Esa es la forma n. ° 1 de hacer que nunca vuelva a utilizar un sitio, es un agujero de seguridad GIGANTICO). Proporcione una página de restablecimiento de contraseña que se activa desde un enlace que contiene una clave asociada al tiempo que se envía al correo electrónico de recuperación de contraseña del usuario ; ese es el estado actual en la recuperación de contraseñas.
No, MD5 es irreversible. El objetivo de las contraseñas hash es hacer que un atacante que tenga acceso a su base de datos no pueda acceder a las contraseñas de todos.
Dicho esto, MD5 (particularmente MD5 sin sal) generalmente puede ser atacado usando una tabla de arco iris . Por seguridad, es mejor que bcrypt .
No, no puedes descifrarlo. Esa es la idea completa.
Debería enviarles una contraseña temporal y que la restablezcan.
Según esta publicación La guía definitiva para la autenticación de sitios web basada en formularios , para los pasos 3 y 4. No estoy seguro de que deba enviar el mismo token que está almacenando.
Supongo que debes enviar el token, luego hash y almacenaste el token hash en DB. De lo contrario, si su base de datos está en peligro, uno puede tener acceso a la página de restablecimiento de contraseña.
Para resumir :
$token = md5(microtime (TRUE)*100000);
$tokenToSendInMail = $token;
$tokenToStoreInDB = hash($token);
donde hash es un algoritmo hash.
Tendrá que hacer una página de restablecimiento de contraseña. No hay forma en PHP para descifrar MD5.
Una contraseña hash MD5 no es reversible. (MD5 es hash, y no realmente encriptado, entonces hay una diferencia sutil). Y sí , definitivamente querrá proporcionar un proceso de "restablecimiento" de la contraseña (y no solo enviar la contraseña por correo electrónico).
Para brindarle un flujo de trabajo de alto nivel para el restablecimiento de contraseñas seguras ...
- Cuando el usuario solicita restablecer su contraseña, haga que ingrese su dirección de correo electrónico
- No indique si esa dirección de correo electrónico era válida o no (simplemente dígales que se envió un correo electrónico). Esto está abierto para el debate ya que reduce la usabilidad (es decir, no tengo idea de con qué correo electrónico me inscribí), pero ofrece menos información a las personas que intentan recopilar información sobre qué correos electrónicos están realmente registrados en su sitio.
- Genere un token (tal vez hash una marca de tiempo con una sal) y guárdelo en la base de datos en el registro del usuario.
- Envíe un correo electrónico al usuario junto con un enlace a la página de restablecimiento de su http (token y dirección de correo electrónico en la url).
- Use el token y la dirección de correo electrónico para validar al usuario.
- Permítales elegir una nueva contraseña, reemplazando la anterior.
- Además, es una buena idea caducar esos tokens después de un cierto período de tiempo, generalmente 24 horas.
- Opcionalmente, registre cuántos intentos "olvidados" han sucedido, y quizás implemente una funcionalidad más compleja si las personas solicitan una tonelada de correos electrónicos.
- Opcionalmente, registre (en una tabla separada) la dirección IP de la persona que solicita el restablecimiento. Incrementa un conteo desde esa IP. Si llega a alcanzar más de, por ejemplo, 10 ... Ignora sus solicitudes futuras.
Para darle un poco más de detalle en hash ...
Cuando tiene un valor como una contraseña usando la función md5 () en PHP, el valor final será el mismo para esa contraseña, sin importar en qué servidor lo ejecute. (Entonces, hay una diferencia que podemos ver de inmediato entre hash y encriptación ... No hay una clave privada / pública involucrada).
Así que aquí es donde verá a personas mencionar una vulnerabilidad a las tablas rainbow . Una explicación muy básica de una tabla de arcoíris es ... Usted md5 () hash un montón de palabras de diccionario (contraseñas débiles) para obtener sus valores de hash md5 (). Ponlos en una tabla de base de datos (tabla de arcoíris).
Ahora, si compromete la base de datos de un sitio web, puede ejecutar las contraseñas hash de los usuarios contra su tabla de arcoíris para (en esencia) "revertir" el hash a una contraseña. (En realidad no estás "invirtiendo" el hash ... Pero entiendes la idea).
Ahí es donde "salando" sus contraseñas es la mejor práctica. Esto significa (una vez más, una idea muy básica aquí) que agregas un valor aleatorio a las contraseñas de los usuarios antes de que lo hasch. Ahora, cuando la tabla rainbow se ejecuta contra su base de datos, no se "invierte" tan fácilmente porque el hash md5 () de "password" es diferente de "password384746".
Aquí hay un buen SO Q / A que debería ayudar. Asegure el hash y la sal para las contraseñas de PHP
Utilice php''s built en password_verify y password_hash.
MD5
es una función de una sola vía. No puedes descifrarlo. Por lo tanto, debe tener una página de restablecimiento de contraseña.