Ldi91
05-01-2007, 20:56
Ich habe ein loginsystem welches auf htaccess Dateien basiert. Jetzt soll der User aber sein Passwort ändern können. Ich habe mir deshalb ein Script programmiert welches Passwörter ändern kann. zur Zeit aber nur klartext passwörter.
<?
#/srv/vhost/backend/user-center/auth/.htusers
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
$cont.=<<<EOD
<h3>Passwort ändern</h3>
<form method="post"><table>
<tr>
<td>Altes Passwort:</td><td><input name="old_passwd"type="password"size="20"></td>
</tr>
<tr>
<td>Neues Passwort:</td><td><input name="new1_passwd"type="password"size="20"></td>
</tr>
<tr>
<td>Wiederhohlen:</td><td><input name="new2_passwd"type="password"size="20"></td>
</tr>
</table>
<input value="Ändern" type="submit">
</form>
EOD;
} else {
$old_passwd=$_POST['old_passwd'];
$new1_passwd=$_POST['new1_passwd'];
$new2_passwd=$_POST['new2_passwd'];
foreach (file('/srv/vhost/backend/user-center/auth/.htusers') as $this_user) {
list($this_name, $this_passwd)=split(":", $this_user, 2);
if($user==$this_name){
$db_user=$this_name;
$db_passwd=$this_passwd;
}
}
if($db_user==""){
$cont.=<<<EOD
<blockquote><b>
Username ist in der Datenbank nicht bekannt.<br/><br/>
<a href="javascript:history.back()">Nochmal Versuchen</a></b>
</blockquote>
EOD;
$ext=1;
}
if($db_passwd!=$old_passwd."\n"){
$cont.=<<<EOD
<blockquote><b>
Das alte Passwort ist falsch.<br/><br/>
<a href="javascript:history.back()">Nochmal Versuchen</a></b>
</blockquote>
EOD;
$ext=1;
}
if($new2_passwd!=$new1_passwd){
$cont.=<<<EOD
<blockquote><b>
Die neuen Kennwörter stimmen nicht überein.<br/><br/>
<a href="javascript:history.back()">Nochmal Versuchen</a></b>
</blockquote>
EOD;
$ext=1;
}
if(strlen($new1_passwd) < 4){
$cont.=<<<EOD
<blockquote><b>
Das Kennwort ist zu kurz. Es muss mindestens 4 Zeichen haben.<br/><br/>
<a href="javascript:history.back()">Nochmal Versuchen</a></b>
</blockquote>
EOD;
$ext=1;
}
if($ext==0){
foreach (file('/srv/vhost/backend/user-center/auth/.htusers') as $this_user) {
list($this_name, $this_passwd)=split(":", $this_user, 2);
if($db_user==$this_name){
$new_file.=$this_name.":".$new1_passwd."\n";
} else$new_file.=$this_user;
}
$handle = fopen ('/srv/vhost/backend/user-center/auth/.htusers', "w+");
fwrite($handle, $new_file);
fclose($handle);
$cont.=<<<EOD
<blockquote><b>
Das Neue Kennwort wurde gesetzt. <br/><br/>
</blockquote>
EOD;
}
}
?>
(wundert euch nicht über das PHP Script. Es ist nur ein modul. Die Variable $cont wird dann über mein CMS in die website eingebaut.)
Jetzt habe ich paar Probleme.
1. User muss sein altes Passwort eingeben. Nur wie ver/entschlüssele ich es
2. Wie verschlüssele ich passwörter nach dem .htaccess verfahren. zur Zeit verwende ich SelfHTML (http://de.selfhtml.org/servercgi/server/htaccess.htm#verzeichnisschutz)
<?
#/srv/vhost/backend/user-center/auth/.htusers
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
$cont.=<<<EOD
<h3>Passwort ändern</h3>
<form method="post"><table>
<tr>
<td>Altes Passwort:</td><td><input name="old_passwd"type="password"size="20"></td>
</tr>
<tr>
<td>Neues Passwort:</td><td><input name="new1_passwd"type="password"size="20"></td>
</tr>
<tr>
<td>Wiederhohlen:</td><td><input name="new2_passwd"type="password"size="20"></td>
</tr>
</table>
<input value="Ändern" type="submit">
</form>
EOD;
} else {
$old_passwd=$_POST['old_passwd'];
$new1_passwd=$_POST['new1_passwd'];
$new2_passwd=$_POST['new2_passwd'];
foreach (file('/srv/vhost/backend/user-center/auth/.htusers') as $this_user) {
list($this_name, $this_passwd)=split(":", $this_user, 2);
if($user==$this_name){
$db_user=$this_name;
$db_passwd=$this_passwd;
}
}
if($db_user==""){
$cont.=<<<EOD
<blockquote><b>
Username ist in der Datenbank nicht bekannt.<br/><br/>
<a href="javascript:history.back()">Nochmal Versuchen</a></b>
</blockquote>
EOD;
$ext=1;
}
if($db_passwd!=$old_passwd."\n"){
$cont.=<<<EOD
<blockquote><b>
Das alte Passwort ist falsch.<br/><br/>
<a href="javascript:history.back()">Nochmal Versuchen</a></b>
</blockquote>
EOD;
$ext=1;
}
if($new2_passwd!=$new1_passwd){
$cont.=<<<EOD
<blockquote><b>
Die neuen Kennwörter stimmen nicht überein.<br/><br/>
<a href="javascript:history.back()">Nochmal Versuchen</a></b>
</blockquote>
EOD;
$ext=1;
}
if(strlen($new1_passwd) < 4){
$cont.=<<<EOD
<blockquote><b>
Das Kennwort ist zu kurz. Es muss mindestens 4 Zeichen haben.<br/><br/>
<a href="javascript:history.back()">Nochmal Versuchen</a></b>
</blockquote>
EOD;
$ext=1;
}
if($ext==0){
foreach (file('/srv/vhost/backend/user-center/auth/.htusers') as $this_user) {
list($this_name, $this_passwd)=split(":", $this_user, 2);
if($db_user==$this_name){
$new_file.=$this_name.":".$new1_passwd."\n";
} else$new_file.=$this_user;
}
$handle = fopen ('/srv/vhost/backend/user-center/auth/.htusers', "w+");
fwrite($handle, $new_file);
fclose($handle);
$cont.=<<<EOD
<blockquote><b>
Das Neue Kennwort wurde gesetzt. <br/><br/>
</blockquote>
EOD;
}
}
?>
(wundert euch nicht über das PHP Script. Es ist nur ein modul. Die Variable $cont wird dann über mein CMS in die website eingebaut.)
Jetzt habe ich paar Probleme.
1. User muss sein altes Passwort eingeben. Nur wie ver/entschlüssele ich es
2. Wie verschlüssele ich passwörter nach dem .htaccess verfahren. zur Zeit verwende ich SelfHTML (http://de.selfhtml.org/servercgi/server/htaccess.htm#verzeichnisschutz)