2016-03-10 1 views
0

J'ai créé un hachage dans confirm_email.phpvérification php email en utilisant la clé secrète

$email = "[email protected]"; 
$secret = "$#@%^&$#$%^&&akeif"; //random characters 
$hash = MD5($email . $secret); 
$message = "https://localhost/mysite/register.php?email=" . $email . "&hash=" . $hash; 

et envoie l'e-mail. Après avoir cliqué sur le lien, je le code suivant dans register.php

$secret = "$#@%^&$#$%^&&akeif"; 

if(isset($_GET['hash']) and (MD5($_GET['email'] . $secret) == $_GET['hash'])) { 
    //allow registration to continue processing 

} else { 
    //don't allow 
} 

Dois-je utiliser des sessions pour stocker le secret (je suppose que je pourrais créer un secret spécifique à l'utilisateur si tel était le cas)? Ou, y a-t-il un meilleur moyen de créer un hachage pour cette approche?

Merci d'avance.

+1

vous ne devriez avoir besoin de la clé secrète dans 2 endroits –

+1

je vous conseille de mettre le secret dans un fichier de configuration, utilisez 'require_once' pour la page qui en a besoin. En utilisant cette méthode, vous pouvez unifier le secret dans un script différent. De plus, vous pouvez utiliser 'authcode' ou une autre fonction/bibliothèque similaire pour effectuer un contrôle de temps de confirmation, si vous en avez besoin. – Hartman

+1

* "Dois-je utiliser des sessions pour stocker le secret" * - Non, il devrait s'agir d'une offre unique et d'un temps limité. –

Répondre

0

Merci à tous. J'ai pris à coeur les suggestions de tout le monde. Le secret est dans un fichier séparé qui est inclus et l'email est encodé en urlencode. J'ai également inclus l'heure dans l'URL et compare les heures sur ma page register.php.

if(($time_now - $_GET['time'] < 1800) and MD5($_GET['time'] . $secret) == $_GET['time_hash']) { 
    $expired = false; 
} 

if(isset($_GET['hash']) and (MD5($_GET['email'] . $salt) == $_GET['hash']) and !$expired) { 
    //allow registration to continue processing 
} 
+1

ne mettez pas le '$ secret' dans la fonction de hachage, cela cause des problèmes de sécurité, préférable d'utiliser' hash_hmac() ', obtenez plus d'informations en lisant [this] (http://crypto.stackexchange.com/questions/1070) article – Hartman