2017-02-18 1 views
0

Ich schrieb einen Code für die Wiederherstellung des Passwortes. In dem Fall, wenn ein bestehender Benutzer seine E-Mail-Adresse in das Pflichtfeld eingibt, wird ein Link zur Passwortwiederherstellung an seine E-Mail gesendet und dann, wenn er auf den empfangenen Link klickt, wird er auf die Seite zur Passwortwiederherstellung gehen. Es funktioniert perfekt.Zeit in E-Mail für die Passwortwiederherstellung einstellen

Aber ich brauche Zeit Link. Bedeutet, wenn ich 60 Sekunden für Passwort-Wiederherstellung-Link auf E-Mail, dann innerhalb von 60 sek. Der Benutzer kann das Passwort wiederherstellen, andernfalls wird die Verbindung fehlschlagen. Ich habe keine Ahnung, wie es geht? Bitte gib mir Hinweise.

in Tabelle Meine Felder sind: Name, E-Mail, Mobile, Passwort, Passcode

update.php

<?php 
include("connection.php"); 
extract($_POST); 
if(isset($email)==true) 
{ 
$query=mysql_query("select * from account where email='$email'") or die(mysql_error());  
$result=mysql_num_rows($query); 

if($result==1) 
{ 
$salt = "498#2D83B631%3800EBD!801600D*7E3CC13"; 
    $restkey = hash('sha512', $salt.$email); 

mysql_query("update account SET passcode='$restkey' where email='$email'") or die(mysql_error()); 

$to="$email"; 
$subject="Password Reset"; 
    $pwrurl = "demo.cstechnology.net/updatepass.php?restkey=".$restkey; 
$message="To reset your password, please click the link below. If you cannot click it, please paste it into your web browser's address bar.\n\n" . $pwrurl . "\n\nThanks,\nThe Administration"; 
    $header="FROM:[email protected]"; 
    mail($to,$subject,$message,$header);  

    } 
    else 
    { 
echo "Invalid Email"; 

} 
} 

?> 
<form action="" method="post"> 
<table> 
<tr><td>Email</td><td><input type="email" required name="email" /></td></tr> 
    <tr><td></td><td><input type="submit" name="submit" value="submit" /></td></tr> 
    </form> 

updatepass (für Insert E-Mail Recovery E-Mail-Link senden). php (Nach dem Klicken auf Wiederherstellung E-Mail-Link auf E-Mail. Passwort wird aktualisiert werden)

<?php 
    session_start(); 
    include("connection.php"); 
    extract($_REQUEST); 
    extract($_POST); 

    if(isset($submit)==true) 
    { 
    $query=mysql_query("update account SET password='$password' where passcode='$restkey'") or die(mysql_error()); 
    echo"Password Updated Successfully"; 
    } 



    if(isset($restkey)==true) 
    { 

    echo"<form action='' method='post'> 
    <table> 
    <tr><td>Password</td><td><input type='password' required name='password' /></td></tr> 
<tr><td></td><td><input type='submit' name='submit' value='submit' /></td></tr> 
</form>"; 
} 
?> 
+1

'$ salt =" 498 # 2D83B631% 3800EBD! 801600D * 7E3CC13 "; Ein Salz sollte für jeden gespeicherten Berechtigungsnachweis eindeutig sein ([OWASP: Passwort Speicher Spickzettel] (https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet#Use_a_cryptographically_strong_credential-specific_salt)) – Andreas

+0

$ salt ist einzigartig und ich habe es mit $ email hinzugefügt. – user3189881

+0

Ich würde diesen Code nicht in einer Live-Umgebung verwenden; es ist nicht so sicher wie du denkst. –

Antwort

0

Sie müssen zusätzliche timestamp Spalte in der Tabelle hinzufügen, so wenn Benutzer klicken auf Passwort-Wiederherstellung speichern Sie hier eine Zeit.

Wenn der Benutzer updatepass.php aufruft, müssen Sie die aktuelle Uhrzeit mit dem in der Tabelle gespeicherten Zeitstempel vergleichen.

update.php

$resettimestamp=time(); 
$query=mysql_query("update account set timestamp=$resettimestamp where email='$email'"); 

updatepass.php

$query=mysql_query("select timestamp from account where email='$email'") or die(mysql_error());  
$row = mysql_fetch_row($query); 
$timestamp=$row[0]; 
$currtime=time(); 
$timewindow=60; // 60 seconds 
if ($currtime-$timestamp<=$timewindow) { 
//your logic to reset password 
} 
else { 
//Tell the user that he is too slow) 
} 

Bitte beachten Sie auch, dass mysql ist nicht mehr in PHP 7.0 nicht unterstützt, so verwenden Mysqli statt, wenn möglich

+0

Vielen Dank für die Antwort. Es kann Arbeit sein. Ich werde es sicher versuchen. – user3189881

+0

Bitte markieren Sie Frage als beantwortet, ich werde es mit Codebeispielen in wenigen Minuten aktualisieren –

+0

Was wird die Art von Feld sein? – user3189881

Verwandte Themen