Autor | Zpráva | ||
---|---|---|---|
Argonisius Profil |
#1 · Zasláno: 26. 10. 2009, 08:11:28
Tak jsem sesmolil script na odeslání ztraceného hesla. Potřeboval bych ho zhodnotit (případně poradit změnu).
Script na odeslání potvrzovacího odkazu e-mailem: <?php $chyba = 0; // Kontrola přijetí dat if($_POST) { $email = $_POST['email']; // Ověření, že bylo pole vyplněno if(trim($email) == '') { echo '<span class="chybova_hlaska">Musíte vyplnit Vaši e-mailovou adresu!</span>'; $chyba = 1; } else { // Ověření správnosti e-mailu if(!EregI("^[a-z0-9]+[a-z0-9\._-]*[a-z0-9]+@[a-z0-9]+[a-z0-9\._-]*[a-z0-9]+\.[a-z]{2,6}$", $email) || EregI("\.{2,}", $email) || EregI("_{2,}", $email) || EregI("-{2,}", $email)) { echo '<span class="chybova_hlaska">Nesprávný formát e-mailu!</span>'; $chyba = 1; } // Pokud je vše správně vyplněno, zkontroluj, jestli je e-mail registrován if($chyba == 0) { // Ověření, zda zadané informace souhlasí s těmi v databázi $query = sprintf("SELECT * FROM users WHERE email = '%s'", mysqli_real_escape_string($dbconnect,$email)); $result = mysqli_query($dbconnect,$query) or die ('Nemohu ověřit správnost e-mailu.'); $data = mysqli_fetch_array($result); if(!$data) { echo '<span class="chybova_hlaska">V databázi není žádný hráč s tímto e-mailem!</span>'; $chyba = 1; } else { // Odeslání potvrzovacího e-mailu uživateli $new_password_validkey = md5(uniqid()); $query = sprintf("UPDATE users SET new_password_validkey = '%s' WHERE email = '%s'", mysqli_real_escape_string($dbconnect,$new_password_validkey), mysqli_real_escape_string($dbconnect,$email)); mysqli_query($dbconnect,$query) or die ('Nemohu vložit potvrzovací kód do databáze.'); $email_encoded = rawurlencode($email); $zprava = "Dobrý den,\n\nz bezpečnostních důvodů ukládáme hesla v zašifrovaném formátu, takže Vám jej nemůžeme zaslat.\n\nMůžete si však nechat vygenerovat heslo nové. Pokud tak chcete učinit, klikněte na tento odkaz:\n$path/nove_heslo.php?email=$email_encoded&new_password_validkey=$new_password_validkey\nV opačném případě nebude heslo změněno.\n\nS pozdravem,\nAdministrátor online hry\n$path"; $zprava= Base64_Encode($zprava); $hlavicka = "MIME-Version: 1.0\n"; $hlavicka .= "Content-Type: text/plain; charset=\"windows-1250\"\n"; $hlavicka .= "Content-Transfer-Encoding: base64"; mail ("$email","$game - Zaslání nového hesla","$zprava","$hlavicka") or die ('Nemohu odeslat aktivační e-mail.'); echo '<span class="oznameni">Na Váš e-mail byly zaslány pokyny pro získání hesla.</span>'; } } } } ?> Script, který přijme data z url a změní heslo: <?php // Kontrola přijetí dat if($_GET) { $new_password_validkey = $_GET['new_password_validkey']; $email = $_GET['email']; // ověření, zda aktivační klíč a e-mail souhlasí $query = sprintf("SELECT * FROM users WHERE new_password_validkey = '%s' AND email = '%s'", mysqli_real_escape_string($dbconnect,$new_password_validkey), mysqli_real_escape_string($dbconnect,$email)); $result = mysqli_query($dbconnect,$query) or die ('Nemohu ověřit, zda je tento potvrzovací klíč v databázi.'); $data = mysqli_fetch_array($result); if(!$data) { echo '<span class="chybova_hlaska">Neplatná kombinace e-mailu a potvrzovacího klíče!</span>'; } else { // Vygenerování nového hesla $nove_heslo = ''; $znaky = 'abcdefghijklmnopqrstuvwxyz123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; $pocet_znaku = strlen($znaky); for ($i=0; $i<8; ++$i) $nove_heslo .= $znaky[mt_rand(0,$pocet_znaku)]; $nove_heslo_hash = sha1($nove_heslo); // Změna hesla $query = sprintf("UPDATE users SET password = '%s' WHERE new_password_validkey = '%s'", mysqli_real_escape_string($dbconnect,$nove_heslo_hash), mysqli_real_escape_string($dbconnect,$new_password_validkey)); $result = mysqli_query($dbconnect,$query) or die ('Nemohu změnit Vaše heslo.'); // Odstranění potvrzovacího klíče z databáze $query = sprintf("UPDATE users SET new_password_validkey = '' WHERE password = '%s'", mysqli_real_escape_string($dbconnect,$nove_heslo_hash)); $result = mysqli_query($dbconnect,$query) or die ('Nemohu vymazat potvrzovací klíč.'); // Odeslání hesla $zprava = "Dobrý den,\n\nvaše nové heslo je: $nove_heslo\n\nMůžete si ho kdykoliv změnit v administraci svého účtu.\n\nS pozdravem,\nAdministrátor online hry\n$path"; $zprava= Base64_Encode($zprava); $hlavicka = "MIME-Version: 1.0\n"; $hlavicka .= "Content-Type: text/plain; charset=\"windows-1250\"\n"; $hlavicka .= "Content-Transfer-Encoding: base64"; mail ("$email","$game - Nové heslo","$zprava","$hlavicka") or die ('Nemohu odeslat nové heslo.'); echo '<span class="oznameni">Na Váš e-mail bylo zasláno nové heslo.</span>'; } } ?> |
||
Časová prodleva: 14 let
|
0