O'Reilly logo

PHP-Sicherheit: PHP/MySQL-Webanwendungen sicher programmieren by Stefan Esser, Christopher Kunz

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

8 Upload-Formulare190
<?php
$extension = substr(strrchr($_FILES['filename']['name'], "."), 1);
if ( stristr($extension,'.gif'))
$extension = '.gif';
elseif ( stristr($extension,'.png'))
$extension = '.png';
elseif ( stristr($extension,'.jpg'))
$extension = '.jpg';
else
die ();
$newfilename = md5(microtime().rand(10000, 32000));
move_uploaded_file($_FILES['filename']['tmp_name'],'/usr/local/
uploads/.'$newfilename.$extension);
?>
Sicherer Upload
Hiermit kann zwar auch schadhafter PHP-Code in einem Bild auf den
Server transportiert werden, aber zur Ausführung kann er nicht
gebracht werden. Auch der Trick, die Datei wie folgt zu benennen,
funktioniert nicht:
bild.gif.php
bild.php%00.gif
Das Sonderzeichen %00, eine hexadezimale 0, ist das String-Ende-
Kennzeichen auf Dateisystemebene. Bei
bild.php%00.gif würde eine
Prüfung auf die Dateiendung
.gif in einem PHP-Skript ein positives
Ergebnis liefern. Dieser String wird nun an das Dateisystem weiterge-
geben, und dort werden alle Zeichen nach der
%00 abgeschnitten. Das
Ergebnis ist dann ein String
bild.php.
Die hochgeladene Datei bekommt einen neuen Namen, der vom
Entwickler festgelegt wird. Der Zielpfad liegt außerhalb des Document
Root. Der Webserver benötigt für dieses Verzeichnis natürlich die ent-
sprechenden Rechte, um die Datei dort abzulegen.
8.5 Bildüberprüfung
Mithilfe der PHP-Funktion getimagesize() kann überprüft werden, ob
es sich um ein valides Bild handelt. Nach Aufruf dieser Funktion wird
ein Array mit Informationen über das Bild zurückgegeben. Handelt es
sich um kein valides Bild, wird
FALSE zurückgegeben.
Bildüberprüfung
if ( getImageSize($_FILES['filename']['tmp_name']) == FALSE)
die ('Kein valides Bild!');
Hier kann auch weiterhin PHP-Code in diesem Bild versteckt sein.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required