| 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: 16 let
|
|||
0