Sicherheit im PHP Member bereich
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anzeigen
array
ausschnitt
bereich
bild
break
code
dank
datei
erkennen
extension
funktion
image
mime
nennen
not
server
typ
type
zeigen
-
Haiho,
ich habe einen kleinen Member bereich nach einer vorlage erstellt. Funktioniert alles soweit ganz super.
Jetzt werden hier Bilder hochgeladen und eigentlich wird nur gecheckt, ob im manem ".gif" oder ".jpg" vorkommt.
aber wenn ich jetzt eine Datei xzy.jpg.exe nenne, dann kann ich doch dahinter einen virus verstecken oder ein anderes schädliches programm, welches dann den server angreifen könnte? wie kann ich das umgehen?
hier der code:
if (!preg_match("/\.(gif|jpg)$/i", $_FILES['uploadedfile']['name'] ) ) { echo "<br /><br />Your image was not .gif or .jpg and it must be one of those two formats, please<br /> <a href=\"edit_pic.php\">click here</a> to try again"; unlink($_FILES['uploadedfile']['tmp_name']); exit();
Dann möchte ich, das wenn ich das Bild dann anzeigen lasse, nur ein bereich in einer von mir definierten größe angezeigt wird.
also das bild soll maximal 500x400px haben. wenn jetzt ein bild größer ist, dann soll der mir das bild nicht skalieren sonder mir einfach einen ausschnitt zeigen?
danke schonmal! :) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
.exe dateien sind auf dem Server nicht zulässig.
Der Server ist schon so schlau die Dateien als Exe zu erkennen und zu löschen ,obwohl die datei "xyz.jpg.exe" heißt ...
Beitrag zuletzt geändert: 13.11.2010 15:23:19 von das-dorf -
ok danke, also muss ich nix mehr machen?
und was ist damit?:
Dann möchte ich, das wenn ich das Bild dann anzeigen lasse, nur ein bereich in einer von mir definierten größe angezeigt wird.
also das bild soll maximal 500x400px haben. wenn jetzt ein bild größer ist, dann soll der mir das bild nicht skalieren sonder mir einfach einen ausschnitt zeigen? -
Eine Exe Datei kann dem Server nichts anhaben. Verboten sind sie trotzdem. Mal davon abgesehen, bringt es dir nichts, den Dateinamen zu prüfen, da ich eine Exe Datei auch xyz.jpg nennen könnte. Was du prüfen musst ist der Mime-Type der Datei und nicht den Dateinamen selbst.
Beitrag zuletzt geändert: 14.11.2010 1:49:17 von fabo -
das-dorf schrieb:
[...]
Der Server ist schon so schlau die Dateien als Exe zu erkennen und zu löschen ,obwohl die datei "xyz.jpg.exe" heißt ...
Das erkennt nicht der Server, sondern auch nur ein simples PHP Skript...
Es ist notwendig die Datei vorher zu prüfen!
Geprüft werden sollte der Mime-Type, wie erwähnt wurde. Wenn der Mime-Type vom Typ "gif", "jpg", "png" ist, dann sollte die Datei unter dem Namen "Datei.Typ" abgespeichert werden. -
kann mir jemand bitte einen kurzen beispielcode nennen, wie ich den mime-typ prüfe?
-
So auf die Schnelle zusammen getippt.$maxsize = 1000000; $successed = false; if(isset($_FILES['datei'])){ if($_FILES['datei']['size']<=$maxsize){ echo "Maximalgröße okay...<br />"; if(($_FILES['datei']['type']=="image/jpeg")||($_FILES['datei']['type']=="image/gif")){ echo "MIME okay...<br />"; $groesze=getimagesize($_FILES['datei']['tmp_name']); if($groesze[0]&&$groesze[1]){ echo "Größentest okay...<br />"; $successed = true; }else{ "Größentest fehlgeschlagen!"; die(); } }else{ echo "Falscher MIME-Typ: " . $_FILES['datei']['type']; die(); } }else{ echo "Datei zu groß: ". $_FILES['datei']['size'] . " > " . $maxsize . "!"; die(); } if($successed){ switch($_FILES['datei']['type']){ case 'image/jpeg': $extension = ".jpg";break; case 'image/gif': $extension = ".gif";break; } $neuername = "irgendeinname.".$extension; if(move_uploaded_file($_FILES['datei']['tmp_name'], $neuername)){ echo "Hochgeladen!"; die(); }else{ echo "Internal Error!"; die(); } }else{ echo "Fehler!"; } }else{ echo "<form enctype=\"multipart/form-data\" action=\"\" method=\"post\">\n"; echo "\t<input type=\"hidden\" name=\"max_file_size\" value=\"$maxsize\">\n"; echo "\tDatei senden: <input name=\"datei\" type=\"file\">\n"; echo "\t<input type=\"submit\" value=\"senden\" name=\"submit\">\n"; echo "</form>\n"; } ?>
-
danke für den code.
ich verstehe nur was nicht, woher kommt das array??
if($groesze[0]&&$groesze[1]){ echo "Größentest okay...<br />"; $successed = true;
und wo sagst du wohin er das speichern soll? -
Das Array wird von der Funktion getimagesize() zurückgegeben und enthält ua. Höhe und Breite des Bildes.
Der Speicherort wird als zweiter Parameter der Funktion move_uploaded_file() übergeben.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage