Har lite funderingar kring hur man på ett säkert sätt hanterar nya löseord för användare som glömt det. Som jag gör nu så låter jag personen skriva in sitt användarnamn, om fältet är tomt dör funktionen, om användarnamnet inte finns dör funktionen, om allt detta stämmer så hämtar den epost adressen ur databasen baserat på användarnamnet.
Efter detta genererar jag ett random 5 siffrigt nummer som jag hashar med md5, men i meddelandet i mailet som skickas, skickar jag löseordet utan md5 hashningen. utöver detta skickar jag också me den ip adress som gjorde begäran av nytt användarnamn och meddelar detta till den som begär nytt lösenord.
Vad mer kan jag göra för att försöka stoppa personer som sitter och kollar upp användarnamn genom att läsa inlägg/kommentarer att sitta och generera nya lösenord till användare.
Be dom skriva in användarnamnet och mailadressen som dom använde när dom registrerarde sig.
Om dom skriver in fel, skriv inte vad som är fel utan bara att dom angivit felaktig information, då vet dom inte om det var användarnamnet eller mailadressen som var fel.
När du sedan skickar ut svarsmailet använd den mailadressen som angavs vid registreringen, inte den som skrivs in när man begär nytt lösenordet.
Sedan kan man göra så att det nya lösenordet måste dom byta första gången dom använder det, för extra säkerhet om mailet kommer på avvägar.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<link href="../setts/style.css" rel="stylesheet" type="text/css" />
</head>
<body class="main2">
<? $ip = $_SERVER['REMOTE_ADDR']; ?>
<span class="margin2">Ditt ip <u><? echo $ip; ?></u> kommer att skickas med i meddelandet till användaren.<br /></span>
<span class="margin2">Detta för är att förhindra missbruk av denna tjänst<br /><br/></span>
<?php
include "../setts/conn.php";
if (isset($_POST['submit'])){
$_POST = db_escape($_POST);
foreach($_POST as $key => $val){
$_POST[$key] = trim($val);
}
$user = $_POST['namn'];
$epost = $_POST['epost'];
if (empty($user) || empty($epost)) { die('Du har inte fyllt i alla fälten');}
//Kolla om användarnamnet är upptaget
$sql = "SELECT COUNT(*) FROM members WHERE user='$user'";
$result = mysql_query($sql);
if (!mysql_result($result, 0) > 0) {
die('Du har inte angivit rätt uppgifter');
}
$sql = "SELECT COUNT(*) FROM members WHERE epost='$epost'";
$result = mysql_query($sql);
if (!mysql_result($result, 0) > 0) {
die('Du har inte angivit rätt uppgifter');
}
if (empty($user)){ die('Du har inte skrivit in ett användarnamn');}
if (!empty($user)){
$sqlas = "SELECT id, user, epost FROM members WHERE user= '$user' AND epost= '$epost'";
$resultan = mysql_query($sqlas) or die(mysql_error());
$Row = mysql_fetch_assoc($resultan);
$id = $Row['id'];
$anv = $Row['user'];
$mail = $Row['epost'];
$losen = rand(100000,9999999999);
$nylosen = md5($losen);
$sql = "UPDATE members SET pass='$nylosen' WHERE user ='$anv' AND id='$id'";
$send = mysql_query($sql) or die(mysql_error());
$till= $mail;
$fran= "test@test.com;
$meddelande= "Hej $anv! Du har via ..begärt ett nytt lösenord till ditt konto.
Ditt nya lösenord är $losen . Du kan sedan ändra detta lösenord genom att gå in i dit profil på ..
Begäran av nytt lösenord gjordes av $ip. //..";
//Vad skall hända när formuläret skickats in.
//Som exempel väljer vi att skicka informationen med ett email:
$amne="Email från $fran";
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From: $fran\r\n";
mail($till, $amne, $meddelande, $headers);
echo "<strong>Ditt nya lösenord har skickats till e-postadressen kopplad till $anv.</strong><br/><br/>";
}
}
?>
<form action="retpass.php" method="post">
<span class="margin2">Användarnamn:</span><br />
<input class="fields" type="text" name="namn" /><br />
<span class="margin2">E-post:</span><br />
<input class="fields" type="text" name="epost" /><br /><br />
<input class="fieldbs" type="submit" name="submit" value="skicka Lösenord" />
</form>
</body>
</html>
Man kan nog förbättra den ännu mer.. speciellt med tanke på vad itpastorn skrivit i ett par inlägg om mysql hantering mm.
134 ms totalt · 3 externa anrop · v20260731065814-full.b746b907