Unlink Problemchen

MrEnergy

Grünschnabel
Hi Leute,

normalerweise geb ich ja nicht so schnell auf, aber gleich werd ich zum rasenden Roland wenn ich weiter rumprobiere.

Folgendes Problem, das Skript unten soll nix machen ausser schlicht und ergreifend eine Datei löschen, dessen name und pfad in einer variable (delt) übergeben bekommt, das ganze soll noch bestätigt werden und gut ist.
Dummerweise, begreift unlink das noch nicht! :D
Bekomme immer bloss den fehler das die datei/pfad nicht exestiert! Und das obwohl der pfad+dateiname schonmal per echo ausgegeben wurde und die datei exestiert. Die rechte der ordner usw. hauen auch hin, denn wenn das form element erweitere wie ganz unten funktioniert das löschen....WARUM?

Code:
<html>
<head>
<link rel="stylesheet" type="text/css" href="../css/member.css">
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
</head>

<?php 
echo "<p align='center'>Das Bild aus dem $count Slot, wirklich vom Server entfernen?</p>";
echo $delt;

if($do == delete){

unlink ($delt);

echo "<script language=\"JavaScript\">\n";
echo "window.close();\n";
echo "</script>";
}

?>


   <form action="delete.php?do=delete" method="POST">
   <p align='center'><input name="submit" type="submit" value="Bestätigen" ></p>
   </form>


</html>


Code:
   <form action="delete.php?do=delete&delt=$delt" method="POST">
   <?php echo "<p align='center'><input name='delt' readonly value='$delt' ></p> "; ?>
   <p align='center'><input name="submit" type="submit" value="Bestätigen" ></p>
   </form>
 
Hallo,

1. Beide Formulare verwenden delete.php?do=delete
Die IF wird als bei beiden Formularen ausgeführt
Workaround: if($_GET['do'] == 'delete' && $delt)

2. Wo wird denn $delt mal gesetzt

3. Ist register_globals an?
$do ist eine $_GET variable, $delt ist sowohl $_Get und $_POST

4. delete ist nicht als string angegeben sondern als konstante , verwende 'delete'

5. Les dir mal das Tutorial in Bezug auf PHP sicherheit durch, mit dem script lösche ich dir deinen Kernel und beim nächsten boot kannst du die Kiste neu installieren.
Ich könnte aber auch einfach alles löschen was in Deinem Root verzeichnis liegt....
Wenn das script live geht, dann erzähls bloss keinem....

Marcus
 
Hallo,

woher soll denn das erste Skript wissen, welche Datei gelöscht werden soll? Ich kann nicht erkennen, dass die Variable $delt irgendwo gesetzt wird. Außerdem benutzt du eine vermutlich undefinierte Konstante delete. Wahrscheinlich meintest du den String "delete".

Abgesehen davon würde es sicher nicht schaden, $delt vorher auf sinnvolle Werte hin zu überprüfen, bevor blindlings alles gelöscht wird, was man dem Skript übergibt…

Grüße,
Matthias

PS:
ripkens hat gesagt.:
5. Les dir mal das Tutorial in Bezug auf PHP sicherheit durch, mit dem script lösche ich dir deinen Kernel und beim nächsten boot kannst du die Kiste neu installieren.
Ich könnte aber auch einfach alles löschen was in Deinem Root verzeichnis liegt....
Aber auch nur, wenn PHP als root läuft. Sollte jemand so lebensmüde sein, hätte er es aber wohl auch nicht anders verdient.
 
Matthias Reitinger hat gesagt.:
Aber auch nur, wenn PHP als root läuft. Sollte jemand so lebensmüde sein, hätte er es aber wohl auch nicht anders verdient.

Im Webroot lösche ich damit alles ohne Probleme, auch als nicht root...., da hilft nicht mal der safe_mode mehr
 
Hallo,

ripkens hat gesagt.:
Im Webroot lösche ich damit alles ohne Probleme, auch als nicht root...., da hilft nicht mal der safe_mode mehr
Der Kernel liegt aber nur äußerst selten im Webroot :) Außerdem kann man das Dateisystem so gestalten, dass man auch im Webroot über PHP i.d.R. nichts löschen kann. Es sei denn man setzt die Rechte explizit so, dass dies möglich ist.

Grüße,
Matthias
 
1. Ich habe auch nicht gesagt das der Kernel im Webroot liegt.

2. Welcher Hoster macht denn das, dann gehen auch keine Uploads in den eigenen Webroot, keine Dateien mit fopen anlegen oder leeren, etc.. etc... ist also sehr sehr unwahrscheinlich das das nicht funktioniert.

Aber bei einem sind wir uns einig, das script ist zu unsicher um jemals produktiv genutzt zu werden

:-)
 
Hallo,

ripkens hat gesagt.:
1. Ich habe auch nicht gesagt das der Kernel im Webroot liegt.
Ich weiß. Ich wollte damit nur untermauern, dass es nicht so ohne weiteres möglich ist, den Kernel zu löschen.

2. Welcher Hoster macht denn das, dann gehen auch keine Uploads in den eigenen Webroot, keine Dateien mit fopen anlegen oder leeren, etc.. etc... ist also sehr sehr unwahrscheinlich das das nicht funktioniert.
Jeder vernünftige Webhoster macht das so. Deshalb findet man ja auch bei den allermeisten PHP-Applikationen, die schreibenden Zugriff auf das Dateisystem benötigen, Anweisungen, welchen Verzeichnissen man explizit die entsprechenden Rechte zuweisen muss.

Aber bei einem sind wir uns einig, das script ist zu unsicher um jemals produktiv genutzt zu werden
Aye :)

Grüße,
Matthias
 
Matthias Reitinger hat gesagt.:
Jeder vernünftige Webhoster macht das so. Deshalb findet man ja auch bei den allermeisten PHP-Applikationen, die schreibenden Zugriff auf das Dateisystem benötigen, Anweisungen, welchen Verzeichnissen man explizit die entsprechenden Rechte zuweisen muss.


Strato, 1und1, server4u und co machen das nicht, bei denen funktioniert unlink, fopen, mkdir etc. im gesamten webroot....
 
Hallo,

ripkens hat gesagt.:
Strato, 1und1, server4u und co machen das nicht, bei denen funktioniert unlink, fopen, mkdir etc. im gesamten webroot....
Ich hab ja auch von vernünftigen Webhostern geredet, nicht von Strato und 1&1 :D Solche Massenhoster lassen PHP via CGI laufen, nicht mit mod_php.

Grüße,
Matthias
 
Habt mit auf jedenfall schonmal nen ganzes Stück weitergeholfen, danke!
Auch was die Sicherheit des Skripts angeht wird sich noch was tun. :)

MFG
 
Zurück