Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Upload: Dateitypproblem [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Upload: Dateitypproblem


 
ZeitenWandel
05-07-2007, 00:12 
 
Hallo liebe Foreumsbenutzer.
Ihr seid meine letzte Rettung. Ich habe schon alles durchforstet, was das Internet hergibt. Ich komme zu keinem Ergebnis. Das Problem lässt sich einfach nicht beheben :(
Erstmal zum Problem: Bei meinem Uploadscript sollte standardmäßig eine Dateitypüberprüfung stattfinden.
Diese sieht so aus:
$file = $_FILES['userfile']['name'];
$path_parts = pathinfo($file);
$filename = "datei_" . time() . "." . $path_parts["extension"];
$extension = strtolower($path_parts["extension"]);
if($extension != "jpg" ||
$extension != "jpeg" ||
$extension != "gif" ||
$extension != "psd" ||
$extension != "bmp" ||
$extension != "png"){
echo '<div class="error">
Das ist ein unerlaubter Dateityp!</div>
<br /><a href="index.php"><img src="undo.png" border="0" />
Zum Upload</a>';
exit;
}
Wenn ich nun eine .png Datei hochlade, erscheint der Fehler, dass diese Endung unerlaubt sei. Habt ihr vielleicht eine Ahnung, woran es liegen könnte?
Ich würde mich riesig über die Hilfe freuen. Ihr seid echt meine letzte Rettung :(

Vielen Dank im Vorraus, Florian!

 
penizillin
05-07-2007, 00:13 
 
http://www.php-resource.de/forum/showthread.php?s=&threadid=50454

das verhalten ist korrekt.
was du willst, ist

nicht (a oder b oder c) welches äquivalent ist zu (nicht a) und (nicht b) und (nicht c)

 
ZeitenWandel
05-07-2007, 00:27 
 
Oh man, auf die Antwort bin ich noch gar nicht gekommen.
Es klappt.
So sieht der Code aus:
if (!($extension == "jpg" ||
$extension == "jpeg" ||
$extension == "gif" ||
$extension == "psd" ||
$extension == "bmp" ||
$extension == "png")){
Ich bedanke mich recht herzlich bei dir, penizillin :)

 
penizillin
05-07-2007, 00:42 
 
beachte den mime typ der dateien, und nicht deren namen. der name kann schließlich beliebig manipuliert werden.

 
ZeitenWandel
05-07-2007, 01:00 
 
Habs bereits umgeschrieben, aber danke für den Tipp:
if (!($_FILES['userfile']['type'] == "image/jpg" ||
$_FILES['userfile']['type'] == "image/jpeg" ||
$_FILES['userfile']['type'] == "image/gif" ||
$_FILES['userfile']['type'] == "image/psd" ||
$_FILES['userfile']['type'] == "image/bmp" ||
$_FILES['userfile']['type'] == "image/png")){
Sind da sonst noch irgendwelche Lücken drin?

 
penizillin
05-07-2007, 01:08 
 
google mal nach pjpeg.
und vergiss nicht, dass auch das keine vollkommene sicherheit bietet, denn auch content-type kann manipuliert werden.

 
pekka
05-07-2007, 01:27 
 
Besser:
http://de3.php.net/manual/en/function.exif-imagetype.php

 
ZeitenWandel
05-07-2007, 03:43 
 
Original geschrieben von pekka
Besser:
http://de3.php.net/manual/en/function.exif-imagetype.php
Das werde ich mir morgen mal anschauen.
Ist das wenigstens sicher?

 
matz0r
05-07-2007, 10:35 
 
Ich würde prinzipiell auch mit getimagesize() prüfen ob er was anständiges zurückliefert.

Exploit dafür gabs auch mal, hoffe aber der ist mittlerweile gefixt ;)

http://ha.ckers.org/blog/20070604/passing-malicious-php-through-getimagesize/


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:46 Uhr.