kostenloser Webspace werbefrei: lima-city


Sicherheit im PHP Member bereich

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    highborn

    highborn hat kostenlosen Webspace.

    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! :)
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. d******f

    .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
  4. Autor dieses Themas

    highborn

    highborn hat kostenlosen Webspace.

    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?
  5. 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
  6. 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.
  7. Autor dieses Themas

    highborn

    highborn hat kostenlosen Webspace.

    kann mir jemand bitte einen kurzen beispielcode nennen, wie ich den mime-typ prüfe?
  8. $maxsize = 1000000;
    		$successed = false;
    		
    		if(isset($_FILES['datei'])){
    			if($_FILES['datei']['size']<=$maxsize){
    				echo "Maximalgr&ouml;&szlig;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&ouml;&szlig;entest okay...<br />";
    						$successed = true;
    					}else{
    						"Gr&ouml;&szlig;entest fehlgeschlagen!";
    						die();
    					}
    				}else{
    					echo "Falscher MIME-Typ: " . $_FILES['datei']['type'];
    					die();
    				}
    			}else{
    				echo "Datei zu gro&szlig;: ". $_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";
    		}
    	?>
    So auf die Schnelle zusammen getippt.
  9. Autor dieses Themas

    highborn

    highborn hat kostenlosen Webspace.

    danke für den code.
    ich verstehe nur was nicht, woher kommt das array??


    if($groesze[0]&&$groesze[1]){
    						echo "Gr&ouml;&szlig;entest okay...<br />";
    						$successed = true;



    und wo sagst du wohin er das speichern soll?
  10. 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.
  11. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!