strip_tags - ¿Cómo generar una cadena de activación segura en php?
strip_tags wordpress (6)
Básicamente tienes algunas opciones:
1) Cree un único identificador único que sea aparentemente aleatorio y almacénelo en su base de datos con el nombre de usuario al que corresponde
2) Genere una contraseña aleatoria e incluya el ID de usuario y la contraseña en el enlace y almacene la contraseña en la base de datos
3) Utilice una función de hashing de una vía (md5, sah1, etc.) y un identificador secreto para cifrar el identificador del usuario. No tiene que almacenar el identificador de usuario cifrado en su base de datos.
La opción 1 es difícil porque debe preocuparse por revisar la base de datos para ver si la clave ya existe. Sin embargo, es bueno que la URL no contenga el nombre de usuario que se está activando.
Si ya va a utilizar algún tipo de base de datos para almacenar la información del usuario (probablemente una contraseña como mínimo) en el futuro, podría optar por la opción 2. No se necesita mucho para agregar otra columna a su base de datos. Al enviar el correo electrónico, guarde el nombre de usuario y algo como $ key = sha1 (rand (1, 99999). $ Username) en otra columna para la fila que contiene el nombre de usuario. Luego haga que su enlace tenga este aspecto: http://you.com/activation.php?user= $ username & key = $ key. En activation.php, verifica si la clave es igual al valor almacenado en la base de datos.
Si desea utilizar menos espacio de almacenamiento en su base de datos, la opción 3 funcionará. Puedes usar algo como $ key = sha1 ($ mysecret. $ Username) como el identificador secreto. Use algo extraño que solo usted conoce como $ mysecret como ''aaafj_my_secret_adfaf''. Utilice el mismo tipo de URL que en la opción 2. Sin embargo, debido a que puede generar $ key basándose solo en $ username, no necesita almacenarlo. Entonces, cuando esté procesando enctivation.php, solo verifique si sha1 ($ mysecret. $ _GET [nombre de usuario]) == $ _GET [clave]. Si lo hace, sabes que tienes el usuario correcto. Teóricamente, con suficientes registros, alguien podría calcular su valor en $ mysecret y generar las claves de activación también. Sin embargo, seguramente notará los miles de millones o más de registros que tomaría antes de que pudieran comenzar a calcular de qué se trata. El número de activaciones requeridas se basa en el tamaño de la clave de la función de hashing. Use sha1 (160 bit) contra md5 (128 bit) para que sea más difícil adivinar su valor de $ mysecret.
Después de que el usuario suscriba el correo electrónico a mi sitio web. Mi sitio web generará un correo electrónico de confirmación y se los enviaremos. En el contenido del correo electrónico, debo incluir la clave de activación, algo como:
www.dominio.com/activate.php?key=$generatedKey
¿Cómo se genera la clave? usando sha1 ($ email) ??
Después de generar la clave, la guardo en la base de datos, de modo que cuando el usuario haga clic en el enlace pueda verificarla con la base de datos. Soy nuevo en eso, por favor avise .. Necesito un script de confirmación de correo electrónico ...
Eso debería hacerlo, sin embargo, puedes mejorarlo agregando un poco de sal, por ejemplo:
$key = sha1($email . ''doYouLikeSauce'');
Otro enfoque es generar una contraseña aleatoria y enviarla por correo electrónico.
Personalmente, solo uso una combinación de cosas como:
$generatedKey = sha1(mt_rand(10000,99999).time().$email);
La posibilidad de colisión es pequeña, pero recomiendo que revise su base de datos antes de enviarla (usar las restricciones ÚNICAS es una manera fácil).
Si almacena la cadena de activación en la base de datos y la comprueba más tarde, ¡no necesita un hash en absoluto!
Solo necesitas una cadena larga y aleatoria. Puedes generarlo como quieras, solo hazlo largo. De hecho, lo ideal es que no tenga nada que ver con el correo electrónico o el nombre de usuario.
$code = md5($_POST[''username''] . microtime());
$guid=md5(uniqid(mt_rand(), true));