Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
15.02.2002, 18:13
G.F.



Hi Leutz
Welche Möglichkeiten hab ich wenn ich Passwörter mit PHP verschlüsseln will?

Benutzer haben verschlüsselte Passwörter in einer mysql Datenbank geschrieben.
Wenn ich dann den Benutzern meiner Page die Möglichkeit geben will sich das Passwort, wenn sie es vergessen haben zuzuschicken und nun das verschlüsselte Passwort ausgelesen habe, wie kann ich dan die Verschlüsslung aufheben, dass sie dann ihr altes Passwort wieder per email zurückerhalten und nicht das verschlüsselte?

THX G.F.

--

zum Seitenanfang zum Seitenende Profil || Suche
001
15.02.2002, 20:56
Joker



Geht soviel ich weiss nicht, sofern du mit md5() verschlüsselt hast. in diesem fall soltest du dem user ein neues passwort senden, oder das passwort in normaler form in die DB schreiben.

--

-=[ Aigu.ch ]=-

zum Seitenanfang zum Seitenende Profil || Suche
002
15.02.2002, 21:22
dp
Administrator


md5() eignet sich da in der Tat, für den Fall dass ein User ein pw vergessen hat muss eben ein neues generiert werden.

--

zum Seitenanfang zum Seitenende Profil || Suche
003
16.02.2002, 18:14
G.F.



wie generier ich passwörter mit php?

--

zum Seitenanfang zum Seitenende Profil || Suche
004
16.02.2002, 20:02
TheTinySteini



Quellcode:
$chars = "abcdefghijklmnopqrstuvwxyz1234567890";
srand ((double)microtime()*1000000);
for($i = 0; $i < 8; $i++)
$newpassword .= $chars[ rand(0,strlen($chars) - 1) ];

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
005
17.02.2002, 00:53
Kriz



Wobei man noch in der Datenbank das Paßwortfeld indiziert deklarieren sollte, also damit ein Paßwort auch nur einmal existiert. Hm, jetzt weiß ich im Moment gar net, ob indiziert der richtige Ausdruck war. Und das als Datenbank-Informatiker o_O...

Na ja, Primärschlüssel ist ja eh verkehrt =) Das bekommt nur die id.

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
006
17.02.2002, 13:17
dp
Administrator


Kriz wieso Unique machen (Meintest du das vielleicht =)? Es kann doch sein, dass 2 User das gleiche PW haben, und zwar nicht weil es generiert wurde sondern weil sie eben das gleiche eingestellt haben o_O

--

zum Seitenanfang zum Seitenende Profil || Suche
007
17.02.2002, 21:34
Joker



Hei. ich hab bei fremden Codes immerwieder diese zeile gesehen:
srand ((double)microtime()*1000000);
was macht die? für was ist die gut?

--

-=[ Aigu.ch ]=-

zum Seitenanfang zum Seitenende Profil || Suche
008
17.02.2002, 22:28
TheTinySteini



Die initialisiert den Zufallszahlengenerator. Dafür wird die aktuelle Zeit (in Mikrosekunden seit Mitternacht, afaik) genommen, erstmal auf nen ordentlichen Wert gebracht (eben mit 1 Million malgenommen) und dann an srand übergeben. Dadurch erhält rand(), das die eigentliche Zufallszahl auswirft, immer wieder einen neuen Startwert, und es ist sehr unwahrscheinlich, dass bei zwei Aufrufen die gleiche Zahlenfolge ausgegeben wird.

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
009
17.02.2002, 22:40
Joker



interessant. hab glaub noch nie mit rand() gearbeitet =) ich hab lieber alles genau ;)

Danke für die genaue Antwort.

--

-=[ Aigu.ch ]=-

zum Seitenanfang zum Seitenende Profil || Suche
010
23.02.2002, 19:20
G.F.



Hat jemand eine Idee wie ich das in die realität umstetzen könnte.
Bis jetzt hab ich nur eine möglichkeit mit cookies gefunden.
Wenn der betreffende der die email bekommen hat den link anklickt wird ein passwort generiert
aber wenn er vorher den username ändert wird kein passwort generiert nur ein hinweis ausgegeben.
Denn in einem cookie ist der nickname gespeichert den er vorher ins formular eingegeben hat.
WEnn er aber auch noch das cookie auf seinem pc umschreibt kann er alle
anderen Userpasswörter generieren lassen und dann ändern. DA ist nun eine beträchtliche Sicherheitslücke!!!!!!!

Quellcode von Passwort datei die mit Hilfe von include die templates einliest:

#####################
######Send Pass######
#####################

if($action == "showsendpass"){
include("templates/topic.html");
include("templates/mainmenue.html");
include("templates/sidemenue.html");
include("templates/sendpass.html");
include("templates/copyright.html");
}

###########################
#####Send Genratelink #####
###########################

if($action == "dosendpass"){
if(empty( $form[nickname] ) || !holeDS("user", "nickname", $form[nickname])){
if(!holeDS("user","nickname",$form[nickname])){
$nachricht = "\" <font color=#00009F>$form[nickname]</font> \" ist kein registrierter Nickname.";
}
if(empty($form[nickname])){
$nachricht = "Sie müssen einen Nickname angeben.";
}
include("templates/topic.html");
include("templates/mainmenue.html");
include("templates/sidemenue.html");
include("templates/sendpass.html");
include("templates/copyright.html");
}
if(!empty($form[nickname]) || holeDS("user", "nickname", $form[nickname])){
setCookie("sendpassnickname", $form[nickname], (time() + 60 * 60 * 24 * 365));
$resultindex = mysql_query("SELECT email,passwordsendcode FROM user WHERE nickname='$form[nickname]'");
$result = mysql_fetch_array($resultindex);
if ($result){
#GenerateLink wird gesendet
//Text einlesen
$text=implode("",file("templates/mail/generate_passwordlink.mail"));
//Nickname eintrage
$text=str_replace("[nickname]",$form[nickname],$text);
$text=str_replace("[url]",$url,$text);
$text=str_replace("[generatecode]",$result[passwordsendcode],$text);
//mail Senden:
@mail($result[email], "Passwort vergessen - Clanpage of Caligo", $text, "FROM: ".$adminmail);
$nachricht = "Ihre Zugangsdaten wurden versendet.";
include("templates/topic.html");
include("templates/mainmenue.html");
include("templates/sidemenue.html");
include("templates/login.html");
include("templates/copyright.html");
}
if($nachricht == ""){
$nachricht = "Ihre Zugangsdaten wurden nicht versendet. Versuchen sie es erneut.";
include("templates/topic.html");
include("templates/mainmenue.html");
include("templates/sidemenue.html");
include("templates/sendpass.html");
include("templates/copyright.html");
}
}
}

###########################
#####Generate Password#####
#######Send Password#######
###########################

if($action == "generatepassword"){
if(isset($username)){
$resultindex = mysql_query("SELECT email,passwordsendcode FROM user WHERE nickname='$sendpassnickname'");
$result = mysql_fetch_array($resultindex);
$chars = "abcdefghijklmnopqrstuvwxyz1234567890";
srand ((double)microtime()*1000000);
for($i = 0; $i < 8; $i++)
$newpassword .= $chars[ rand(0,strlen($chars) - 1) ];
if(isset($result) && isset($newpassword)){
include("templates/topic.html");
include("templates/mainmenue.html");
include("templates/sidemenue.html");
include("templates/generatepassword.html");
include("templates/copyright.html");
if($result[passwordsendcode] == $hash){
$enewpassword = md5($newpassword);
mysql_query("UPDATE user SET password='$enewpassword' WHERE nickname='$sendpassnickname'");
# Passwort wird gesendet
//Text einlesen
$text=implode("",file("templates/mail/send_password.mail"));
//Paswort und Login-Name eintrage
$text=str_replace("[password]",$newpassword,$text);
$text=str_replace("[url]",$url,$text);
$text=str_replace("[nickname]",$username,$text);
//mail Senden:
@mail($result[email], "Passwort vergessen - Clanpage of Caligo", $text, "FROM: ".$adminmail);
}
}
}
if(!isset($username)){
$nachricht = "Es ist kein Username gesetzt.";
include("templates/topic.html");
include("templates/mainmenue.html");
include("templates/sidemenue.html");
include("templates/generatepassword.html");
include("templates/copyright.html");
}
}
?>

Dann die Template Datei die das generierte Password ausgibt:

<!--adduser-->
<table width=631 cellpadding=0 cellspacing=0 bgcolor=#A9AAB0 align=left border=0>
<tr>
<td height=10> 
</td>
</tr>
<tr>
<td>
<table width=628 cellpadding=0 cellspacing=0 align=center border=0>
<tr>
<td>
<table width="625" cellpadding=0 cellspacing=0 align=center border=0>
<tr>
<td width=623 align=center valign=center height=30 class=cellregisterbenutzeranmelden >
<div class=registrierung>Ihr Password</div>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td height=8>
</td>
</tr>
<tr>
<td>
<table width="625" cellpadding=2 cellspacing=2 align=center border=0 class=cellregisterdaten>
<tr>
<td height=15>
</td>
</tr>
<tr>
<td width=120 align=left valign=center height=20>
<div class=registrierungvalues> </div>
</td>
<td >
</td>
</tr>
<tr>
<td align=left valign=center height=20 >
<div class=registrierungvalues>
<?php
if(isset($username)){
if(isset($sendpassnickname)){
$resultindex = mysql_query("SELECT passwordsendcode FROM user WHERE nickname='$sendpassnickname'");
$result = mysql_fetch_array($resultindex);
if($hash != $result[passwordsendcode] && isset($hash)){
print "Sie haben die Variable username geändert. <br> <font color=\"#DC2125\">WE REALLY HATE PEOPLE WHO WANTS TO RIP OTHER PEOPLE THEIR PASSWORD.</font>";
}
if($hash == $result[passwordsendcode]){
print "Hallo ".$username.",<br>hier sind Ihre Zugangsdaten für die Caligo Clanpage:<br>Benutzername: ".$username."<br>Passwort: ".$newpassword."<br>Bitte beachten Sie, dass diese Daten <font color=\"#DC2125\">case-sensitive</font> sind! Hier können Sie sich einloggen: <a href=\"pass.php?action=showlogin\"><font color=\"#000097\">Login</font></a><br>Viel Spass wünscht Ihnen der Counterstrike Clan Caligo!";
}
}
if(!isset($sendpassnickname)){
print "Sie müssen die Cookies im Internetexplorer einschalten.";
}
}
if(!isset($username)){
$b = "username";
$ergebnis = "username";
}
if(!isset($hash)){
$a = "hash";
$ergebnis = "hash";
}
if(!isset($username) && !isset($hash)){
$ergebnis = $a." und ".$b;
}
if(!isset($username) || !isset($hash)){
print "Sie haben das ".$ergebnis." Attribut im Header vergessen.";
}
?></div>
<p> </p>
</td>
<td >
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
<!--adduser-->

Und nun zuletzt die email dateien
Hi [nickname],

ihr Password wurde generiert.
Hier sind noch einmal Ihre Zugangsdaten für die Caligo-Clanpage:

Benutzername: [nickname]
Passwort: [password]

Bitte beachten Sie, dass diese Daten case-sensitive sind!
Hier können Sie sich einloggen:
[url]/pass.php?action=showlogin

Bitte ändern sie ihr Passwort umgehend.
Viel Spass wünscht dir
der Caligo-Clan!

Hi [nickname],

Falls Sie ihr Passwort vergessen haben, klicken Sie bitte diese Link an, um ein neues Passwort generieren zu lassen:
[url]/pass.php?username=[nickname]&action=generatepassword&hash=[generatecode]

Wenn Sie ihr Passwort nicht vergessen haben, verwerfen Sie bitte diese Email.

Viel Spass wünscht dir
der Caligo-Clan!

Ich hoffe mir kann jemand eine bessere variante vorschlagen *hope* Ach übrigens "passwordsendcode" ist eine Spalte in der der generatecode bei der registrierung schon festgelegt wird.

--

zum Seitenanfang zum Seitenende Profil || Suche
011
23.02.2002, 20:50
TheTinySteini



Das Problem lässt sich lösen, in dem man in der Datenbank die Email-Adresse des Users speichert und dann den Benutzernamen abfragt (und zwar nicht per Cookie, sondern per Eingabefenster). Wenn dann dieser Benutzername existiert, wird an die in der Datenbank gespeicherte E-Mail-Adresse das neue Passwort geschickt. Damit ist relativ gut sichergestellt, dass auch wirklich nur der das neue Passwort bekommt, der die richtige Email hat.

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche