PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bei PHP-Upload nur jpg und gif erlauben?


Natheedo
2006-06-15, 17:39:03
Hallo,

ich hab hier ein kleines Privates Upload Skript das ich für paar Sachen auf meinem Webserver nutze, das auch soweit für meine Ansprüche gerecht ist - Nur sind mir in den letzten Tagen vermehrt Dateien aufgefallen die ich nicht hochgeladen habe - Besonders eine "cookie_overflow.php" ...

Das bereitet mir jetzt allmählich Kopfschmerzen, das ich an das Sicherheitsrisiko nicht eher gedacht hab.

Darum ist die Frage, wie ich mein Upoadscript so ergänze (hab vom php selber schreiben leider keine Ahnung) das man lediglich .jpg und .gif. Dateien damit hochladen kann?

Hier das Script :


<?php

## pfad von dieser datei aus wo das hochgeladen werden soll
$dir = "../pics/vorlagenpics/bildupload";
$url = "http://www.DOMAIN.de";

if($_POST['uppen']){
if(!empty($_FILES['file']['name'])){


// Tmp_name
$tempname = $_FILES['file']['tmp_name'];
$tempname2 = $_FILES['file2']['tmp_name'];
$tempname3 = $_FILES['file3']['tmp_name'];

// Namen der dateien
$name = str_replace(" ","_",$_FILES['file']['name']);
$name2 = str_replace(" ","_",$_FILES['file2']['name']);
$name3 = str_replace(" ","_",$_FILES['file3']['name']);

// typen der dateien
$type = $_FILES['file']['type'];
$type2 = $_FILES['file2']['type'];
$type3 = $_FILES['file3']['type'];

// groeße der dateien
$size = $_FILES['file']['size'];
$size2 = $_FILES['file2']['size'];
$size3 = $_FILES['file3']['size'];

// Dateien kopieren
@copy("$tempname", "$dir/$name");
@copy("$tempname2", "$dir/$name2");
@copy("$tempname3", "$dir/$name3");

// Ueberpruefung
$f1 = file_exists($dir."/".$name);
$f2 = file_exists($dir."/".$name2);
$f3 = file_exists($dir."/".$name3);

if($f1) {
$output = $url."/pics/vorlagenpics/bildupload/".$name;
$ausgabe = htmlentities(stripslashes($output));
}else echo "Upload von Datei 1 fehlgeschlagen!<br>";

if($f2){
$output2 = $url."/pics/vorlagenpics/bildupload/".$name2;
$ausgabe2 = htmlentities(stripslashes($output2));
}else echo "Upload von Datei 2 fehlgeschlagen!<br>";

if($f3){
$output3 = $url."/pics/vorlagenpics/bildupload/".$name3;
$ausgabe3 = htmlentities(stripslashes($output3));
}else echo "Upload von Datei 3 fehlgeschlagen!<br>";

}else echo "Datei muss gewählt werden<br>";



}

#echo "<form enctype=\"multipart/form-data\" action=\"?do=up\" method=\"post\">";
if(isset($output) || isset($output2) || isset($output3)){
if(!empty($name))
echo "<input type=\"text\" size=\"80\" name=\"file\" value=\"$ausgabe\">&nbsp;<img src=\"pics/haken.gif\" border=\"0\" alt=\"\"><br>";
if(!empty($name2))
echo "<input type=\"text\" size=\"80\" name=\"file2\" value=\"$ausgabe2\">&nbsp;<img src=\"pics/haken.gif\" border=\"0\" alt=\"\"><br>";
if(!empty($name3))
echo "<input type=\"text\" size=\"80\" name=\"file3\" value=\"$ausgabe3\">&nbsp;<img src=\"pics/haken.gif\" border=\"0\" alt=\"\"><br>";
}else{
echo "<input type=\"file\" size=\"80\" name=\"file\"><br>";
echo "<input type=\"file\" size=\"80\" name=\"file2\"><br>";
echo "<input type=\"file\" size=\"80\" name=\"file3\"><br>";
}
echo "<br><input type=\"submit\" name = \"uppen\" value=\"Hochladen\"> <span class=\"rot\"> &lt;&mdash; Bild auswählen dann auf hochladen klicken!</span>";

?>


Wäre vielleicht bitte jemand so nett und könnte mir da auf die Sprünge helfen?

Danke !

Natheedo

medi
2006-06-15, 17:43:00
nur so ne idee: schnippel doch einfach die letzten 3 zeichen vom filenamen ab und vergleich diesen string mit "jpg" und "gif" und nu bei nem hit lädst du die dateien hoch

darph
2006-06-15, 17:46:00
function addFile($icon_file) {
if ($icon_file['type'] == "image/gif") {
if (!move_uploaded_file($icon_file['tmp_name'],
$template_path."/images/lang/".strtolower($_POST["code"]).".gif")) {
$message = "The icon file could not be uploaded.";
break;
}
} else {
$message = "The file is of an invalid file type.";
break;
}
}

So erlaubst du nur gif...


Siehe auch http://www.php.net/manual/de/features.file-upload.php

$_FILES['userfile']['type']
Der Mime-Type der Datei, falls der Browser diese Information zur Verfügung gestellt hat. Ein Beispiel wäre "image/gif".

Natheedo
2006-06-15, 18:13:17
Ok danke, werds mal probieren.

Natheedo

Gast
2006-06-16, 01:12:22
Darauf kann man sich nicht verlassen, schließlich sendet der Browser die Information mit, und die kann manipuliert werden.

Ich würde versuchen das Bild mit der gdlib zu öffnen, klappt das nicht wird das Bild gedroppt. Eventuell könnte man noch einen optionale Prüfung per JS einbauen, damit sich kein User verklickt und aus Versehen eine falsche Datei uploaded.

darph
2006-06-16, 01:40:54
Alternativ kannst du auch einfach dein Skript mit htpasswd schützen.

Natheedo
2006-06-16, 01:45:12
Nun habs jetzt mit den MIME Types gemacht und zusätzlich das Script noch PW geschützt - Denke das wird erstmal reichen.

Danke für die Anregung !

Natheedo