Mit den richtigen Zugriffsrechten funktioniert das Script ohne Änderung.
Ich möchte aber folgendes zu Bedenken geben in der aktuellen Version deines Scriptes:
-
Kennt jemand den Usernamen von einem anderen, kann er die andere Datei einfach mit einem neuen Passwort überschreiben.
-
sollte man den Usernamen schon sehr genau prüfen, da hier eine Datei auf dem Dateisystem abgelegt wird mit der Bezeichnung des eingegebenen Namens.
-
Usernamen wie „…/“ oder sonstiges sollte generell nicht möglich sein
-
Dateibezeichnungen mit txt hinten sollten gänzlich vermieden werden oder zumindest in ein Subverzeichnis geschoben werden, dass du mit htaccess schützt.
ansonsten kann jedermann in deinen txt-Files illern und die md5-Hasches mit Rainbow-Tables oder Bruteforcing knacken.
ich habe dir mal was zusammengecoded, was dies alles soweit beachtet.
Teste das script einfach mal mit der Ordnerberechtigung 0777 (besonders das Subverzeichnis userfiles)
<?php $user = trim($_POST['user']);
$pw = trim($\_POST['newpassword']);
$pwmd5 = md5($pw);
$oldpw = trim($\_POST['oldpassword']);
$oldpwmd5 = md5($oldpw);
if ($\_POST)
{
$fehler=0;
if (!preg\_match("=^[\_.a-zäöüÄÖÜß0123456789]+$=i",$user)) {
$fehler=1;
}
if($fehler==1 || stristr($user, '.') == TRUE || stristr($user, '/') == TRUE || stristr($user, '\\') == TRUE) {
echo "Ungültiges Zeichen im Usernamen!";
}
else
{
if($user=="" || $pw=="")
{
echo "Bitte einen Usernamen und Passwort angeben!";
}
else
{
$datei = "userfiles/".$user.".php";
$inhalt = "<?php /* ".$user."
".$pwmd5."
\*/ ?\>";
$checkpassword=0;
if (file\_exists($datei))
{
$checkpassword=1;
}
if ($checkpassword==1)
{
$textdatei = fopen($datei, "r");
$contents = fgets($textdatei, 4096);
$contents = fgets($textdatei, 4096);
$contents=trim(str\_replace("<?php /*","",$contents));
$contents=trim(str\_replace("\*/ ?\>","",$contents));
$oldpassword=$contents;
if ($oldpwmd5!=$oldpassword)
{
echo "Da der User bereits existierte und das alte Passwort nicht übereinstimmt, wird keine Änderung vorgenommen";
fclose($textdatei);
exit();
}
fclose($textdatei);
}
$textdatei = fopen($datei, "a+");
fwrite($textdatei, $inhalt);
fclose($textdatei);
if ($checkpassword==1)
{
print "Passwort erfolgreich in $datei geändert.
";
}
else
{
print "Daten erfolgreich eingegeben in $datei eingegeben.
";
}
}
}
}
echo "
User:
Altes Passwort:
Neues Passwort: ";
?\>