Seite 1 von 1
PHP-Spezis gefragt - Upload von Bilddatei
Verfasst: 29.09.2009, 20:31
von Fightmeyer
Hallo Leute,
ich versuche via PHP ein Bild über den Browser hochzuladen. Diesen Code hier hab ich mir aus dem Internet zusammengeklaubt.
Code: Alles auswählen
<html>
<head>
<title>Upload</title>
</head>
<body><?
if($action){
$path = "/test/"; //Url zum Speicher Ordner
$filename = "";
$deindomain = "http://www.deindomain.de";
$time=time();
if ($_FILES['userfile']['tmp_name']<> 'none')
{
$file = $_FILES['userfile']['name'];
$temp = $_FILES['userfile']['tmp_name'];
$path_parts = pathinfo($file);
$filename = "test_" . $time . "." . $path_parts["extension"];
$dest = $path.$filename;
copy($temp, $dest);
echo 'Datei ist auf den Server!';
echo 'Url der Datei: '.$deindomain.$path.$filename;
}
} else { ?>
<form method="post" enctype="multipart/form-data" action="<?php echo $PHP_SELF ?>">
<input type="hidden" name="MAX_FILE_SIZE" value="400000">
<br>
<strong>File Upload</strong> <br>
<br>
<input name="userfile" type="file" size=40>
<br>
<br>
<input type="submit" name="action" value="Speichern">
</form><? } ?></body>
</html>
Es läuft auch ohne Fehler durch, allerdings wird nirgendwo eine Datei hochgeladen. Ich hab auf meinem Rechner lokal Xampp installiert, um das zu testen. Es funzt aber nicht. Hat jemand ne Idee, was an dem Scipt falsch ist bzw. was noch fehlt?
Re: PHP-Spezis gefragt - Upload von Bilddatei
Verfasst: 30.09.2009, 15:32
von Fightmeyer
Hat sich erledigt. Hab ne Lösung gefunden und den Code noch etwas umgestrickt.
Code: Alles auswählen
<html>
<head>
<title>Imageupload auf den Server</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
<table>
<tr><td><select name="ordnerliste">
<option>bilder</option>
<option>scripte</option>
<option>test</option>
</select>
</td></tr>
<tr><td><p>Bild: <input type="file" name="pictures[]" /></p></td></tr>
<tr><td><p>Bild: <input type="file" name="pictures[]" /></p></td></tr>
<tr><td><p>Bild: <input type="file" name="pictures[]" /></p></td></tr>
<tr><td><input type="submit" value="Upload" /></td></tr>
</table>
</form>
<?php
if (isset($_FILES['pictures'])) {
$upload_dir="../".$_POST[ordnerliste]."/";
//auf Errormeldung prüfen
foreach ($_FILES["pictures"]["error"] as $key => $error) {
//wenn Errormeldung "Upload OK", dann aus Tempverzeichnis in richtiges Verzeichnis kopieren
if ($error == UPLOAD_ERR_OK) {
//quell und zielpfad aufbereiten
$source=$_FILES["pictures"]["tmp_name"][$key];
$destination=$_FILES["pictures"]["name"][$key];
//Bildgröße ermitteln (wenn Funktion OK, dann tatsächlich eine Bilddatei)
$istBild= getimagesize($_FILES["pictures"]["tmp_name"][$key]);
//wenn Bilddatei, dann ins richtige Verzeichnis kopieren
if ($istBild) {
//datei aus tempverzeichnis ins richtige verzeichnis kopieren
move_uploaded_file($source, $upload_dir.$destination);
echo "$destination erfolgreich hochgeladen.<br>";
}
else {
echo "$destination ist keine gültige Bilddatei! Es erfolgte kein Upload der Datei.<br>";
}
}
}
}
?>
</body>
</html>
Die Formulardaten (Dropdownlist) lass ich mir später durch ne MySQL-Abfrage befüllen und die Anzahl der hochzuladenen Bilder kann der User vorab festlegen. Aktuell ist das fix auf 3. Falls jemand das gebrauchen kann, kann er das gerne verwenden. Obwohl ich nicht sicher bin, ob das alles PHPmäßig sicher genug ist...
Re: PHP-Spezis gefragt - Upload von Bilddatei
Verfasst: 01.10.2009, 14:27
von 11.517
Ich vermute, dass man durch Anpassen von "ordnerliste" in beliebige Verzeichnisse uploaden kann. Denn wenn wir z.B. die Verzeichnisstruktur
haben, dann könnte der Angreifer als "ordnerliste" "php" und als Dateinamen "upload.php" übergeben. Das Script würde sich dann praktisch selbst überschreiben.
Da würde ich vorher genau prüfen, was in der Variable steht und den Pfad erst danach zusammenbauen. Oder besser überhaupt nichts zusammenbauen, die erlaubten Pfade stattdessen fest vorgeben und je nach Variableninhalt den passenden Pfad verwenden:
Code: Alles auswählen
switch($_POST['ordnerliste'])
{
case "bilder":
$upload_dir="../bilder/";
break;
case "scripte":
$upload_dir="../scripte/";
break;
case "test":
$upload_dir="../test/";
break;
default:
// Sonstiges ...
die('...');
}
Re: PHP-Spezis gefragt - Upload von Bilddatei
Verfasst: 01.10.2009, 21:58
von Fightmeyer
Guter Hinweis. Allerdings kommen die Angaben für "Ordnerliste" aus einer vordefinierten DropDownbox und werden dann nicht über die URL übergeben, sondern via Post.
Oder kann man darüber auch die Daten manipulieren? Ich kenn mich in PHP noch nicht so wirklich gut aus.
Find zum einen die unzähligen Funktionen ziemlich erschlagend, obwohl man sich ja da halbwegs was zu recht googlen kann. Und mit dem ganzen Aspekt Sicherheit hab ich mich bisher auch nur am Rande beschäftigt. Aktuell liegt das "Uploadformular" in einem per .htaccess geschützen Bereich des Webservers. Uploaden soll später eh nur der Admin, also ich

Re: PHP-Spezis gefragt - Upload von Bilddatei
Verfasst: 02.10.2009, 14:01
von 11.517
Fightmeyer hat geschrieben:Guter Hinweis. Allerdings kommen die Angaben für "Ordnerliste" aus einer vordefinierten DropDownbox und werden dann nicht über die URL übergeben, sondern via Post.
Oder kann man darüber auch die Daten manipulieren?
Ja, das geht. Wenn zum Beispiel jemand den HTML-Code Deiner Seite kopiert und auf seiner Festplatte speichert, kann er den Code ja nach Belieben umschreiben. Dann kann er auch die Einträge der DropDownbox verändern oder zusätzliche Einträge anlegen.
In der Zeile
müsste er noch die genaue URL Deines Scripts eintragen, damit sein Browser weiss, wohin er die Daten schicken muss. Anschliessend kann er die bearbeitete HTML-Seite in seinem Browser aufrufen und der schickt dann die Werte des Angreifers an Dein Script.
In der Praxis wäre es auch möglich, dass sich der Angreifer in den Datenstrom zwischen seinem Browser und Deinem Script einklinkt und dafür sorgt, dass genau die Daten übertragen werden, die er übertragen möchte. Für Firefox gibt es zu diesem Zweck spezielle Erweiterungen (z.B.
dies oder
das).
Letztlich musst Du also immer damit rechnen, dass an Deine Scripte unerwartete Daten gesendet werden. Denn die Daten werden vom Browser gesendet, und der Browser läuft auf einem Computer, der von jemand anderem kontrolliert wird.
Re: PHP-Spezis gefragt - Upload von Bilddatei
Verfasst: 02.10.2009, 14:06
von Fightmeyer
Verstehe. Na dann werd ich da mal noch die ein oder andere Prüfung mit einbauen.