Problem mit Uploaddateityp

Chaoslion

Mitglied
Hi,

ich hab ein Problem, ich will auf meinem Webspace nicht allmöglichen schrott haben, also hab ich mal auf Tutorials.de und google rumgesucht um den gesendeten Dateityp zu überprüfen, ich hab auch schon soviel herausgefunden, das man mit
PHP:
$_FILES['userfile']['type']
nicht recht weit kommt...
also hab ich das so gemacht: (script ist von php.net da das von tutorials.de bei mir nicht funktioniert)
PHP:
<?php 
// In PHP kleiner als 4.1.0 sollten Sie $HTTP_POST_FILES anstatt $_FILES verwenden.
// In PHP kleiner als 4.0.3 verwenden Sie copy() und is_uploaded_file() anstatt von
// move_uploaded_file()

$uploaddir = '/usr/export/www/hosting/xmen156/funvideo/upload/';
$exp = explode(".", $_POST["userfile"]);

if($exp[1] == "jpg" || $exp[1] == "gif" || $exp[1] == "jpeg"){
print "<pre>";

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $_FILES['userfile']['name'])) {

   print "File is valid, and was successfully uploaded.  Here's some more debugging info:\n";
   print_r($_FILES);

} else {
   print "Possible file upload attack!  Here's some debugging info:\n";
   print_r($_FILES);
}
}
else
{
echo "Es dürfen nur dateien mit der endung JPG, GIF oder JPEG hochgeladen werden";
}
?>
Das Problem ist nun, das bei dem $exp[1] kein Inhalt ist...

Danke schonmal für euere Hilfe :D
 
Zuletzt bearbeitet:
aaah schon erledigt, hab ein anderes skript gefunden bei dem es einwandfrei funktioniert:
PHP:
<?php 

// Variabeln festlegen 
$max_byte_size = 2097152; 
$allowed_types = "(jpg|jpeg|gif|bmp|png)"; 

// Formular wurde abgeschickt 
if($_POST["submit"] == "Upload") { 

// Wurde wirklich eine Datei hochgeladen? 
if(is_uploaded_file($_FILES["file"]["tmp_name"])) { 

// Gültige Endung? ($ = Am Ende des Dateinamens) (/i = Groß- Kleinschreibung nicht berücksichtigen) 
if(preg_match("/\." . $allowed_types . "$/i", $_FILES["file"]["name"])) { 

// Datei auch nicht zu groß 
if($_FILES["file"]["size"] <= $max_byte_size) { 

// Alles OK -> Datei kopieren 
if(copy($_FILES["file"]["tmp_name"], $_FILES["file"]["name"])) { 

echo "Datei erfolgreich hochgeladen!<br>"; 
echo "Name: " . $_FILES["file"]["name"] . "<br>"; 
echo "Größe: " . $_FILES["file"]["size"] . " Byte<br>"; 
echo "MIME-Type: " . $_FILES["file"]["type"] . "<br>"; 
echo "Link: <a href=\"" . $_FILES["file"]["name"] . "\">" . $_FILES["file"]["name"] . "</a>"; 

} 
else { 

echo "Datei konnte nicht hochgeladen werden."; 

} 

} 
else { 

echo "Die Datei darf nur eine Größe von " . $max_byte_size . " Byte besitzen."; 

} 

} 
else { 

echo "Die Datei besitzt keine ungültige Endung."; 

} 

} 
else { 

echo "Keine Datei zum Hochladen angegeben."; 

} 

} 
else { 

echo "Bitte benutzen Sie das Upload Formular."; 

} 

?>
 
Hallo!

Wenn Du nicht willst dass der User das "bösescript.jpg" hochläd, dann solltest Du lieber den MIME-Type überprüfen..... und nicht die Dateiendung.
Mit anderen Worten: Deine Überprüfung des Dateityps ist völlig sinnlos. ;)
PHP:
if($_FILES['file']['type'] == "image/jpeg" OR $_FILES['file']['type'] == "image/pjpeg" OR $_FILES['file']['type'] == "image/gif" OR $_FILES['file']['type'] == "image/bmp" OR $_FILES['file']['type'] == "image/png") {
    // mach was
} else {
    echo "Falscher Dateityp!";
}
Evtl. musst Du noch mehr MIME-Typen hinzufügen.

Gruss Dr Dau
 
Zurück