Wie mache ich ein Upload Script sicher

Und wie mache ich das ?
Das müsste eingebaut sein oder nicht ?
Oder ist das mit dem Datei_ending nur irgend ein Teil des Namens, noicht die wirkliche Endung ?
 
Original geschrieben von PhoenixDH
Und wie mache ich das ?
Das müsste eingebaut sein oder nicht ?
Oder ist das mit dem Datei_ending nur irgend ein Teil des Namens, noicht die wirkliche Endung ?

Alter! Er hat doch klipp und klar gesagt dass diese "Methode"
der unsichere Punkt an deinem Script ist!

PHP:
if ($_FILES['userfile']['type'] == "image/jpeg") echo "bild ist ein JPG!";
 
Das ist mir schon klar, mit der alten Überprüfung wird nur geprüft ob irgendo im Dateinamen.jpg oder so auftaucht, was dahinter ist interessiert dann nimmer !
Aber das müsste doch auch mit getimagesize gehen oder nicht ?
 
mit getimagesize() kannst du sicher überprüfen. ob es sich um ein Bild handelt, und um welches Format....und dies völlig unabhängig von der Dateiendung.

Deine Prüfung auf die Dateiendung solltest du trotzdem beibehalten....denn bei getimagesize() spielt die Dateiendung wie gesagt keine Rolle.
Du solltest dabei jedoch nicht $datei_ending[1] , sondern $datei_ending[count($datei_ending)-1] prüfen....also das, was hinter dem letzten Punkt kommt.
 
$datei_ending[count($datei_ending)-1], prüft das automatisch das was nach dem letzten Punkt kommt oder geht das nur wenn es sich um 2 Punkte in dem Dateinamen handelt, also ich habe jetzt nur $datei_ending[count($datei_ending)-1] eingebunden, reicht das oder brauche ich noch was um die Prüfung sicher zu machen !

Muss ich nur den Teil in der if-Prüfung in $datei_ending[count($datei_ending)-1] ändern oder alles in dem Code was mit $datei_ending[1] zu tun hat ?

Danke schon mal !
 
Das prüft das, was nach dem letzten Punkt kommt....also bei einem Punkt ist der erste der letzte:-)

Es wäre noch sicherer/einfacher, dies mit RegExp zu machen....weil so wie es jetzt ist, wäre es bspw. möglich, eine Datei, welche lediglich 'jpg' heisst, hochzuladen.


per RegExp sähe das so aus:
Code:
if(preg_match("/.+\.(jpeg|jpg|gif|png)$/i",$datei_name)
 {
 //Die Dateiendung stimmt schon mal
 //Hier jetzt noch per getimagesize() prüfen, obs tatsächlich eine Grafik  ist
 }
 
Also wenn ich es mit

if(preg_match("/.+\.(jpeg|jpg|gif|png)$/i",$datei_name))

mache, kann ich auch php hochladen :(

Es handelt sich ja nur um diesen Code den ich anpassen müsste:
Code:
$datei_ending = explode(".", $datei_name);
$datei_ending[1] = strtolower($datei_ending[1] );
if(preg_match("/.+\.(jpeg|jpg|gif|png)$/i",$datei_name))
   {
   $err_msg .= ' Ihr Bild ist keine zugelassene Datei. Zugelassene Dateiendungen sind: .JPEG,.PNG,.JPG,.GIF. !<br><br>';
   $fehler = 1;
   }

Könntest du mir den vl. anpassen, wäre dir sehr dankbar.
Bekomme es nicht recht zum laufen !
 
Zuletzt bearbeitet:
Du machst ja auch genau das Gegenteil, von dem was ich gepostest habe, ...du prüfst, ob die Endung nicht stimmt...ich habe hingegen geprüft, ob sie stimmt :-)

Wieauchimmer, so sollte es hinhauen:
Code:
if(!preg_match("/.+\.(jpeg|jpg|gif|png)$/i",$datei_name))
   {
   $err_msg .= ' Ihr Bild ist keine zugelassene Datei. Zugelassene Dateiendungen sind: .JPEG,.PNG,.JPG,.GIF. !<br><br>';
   $fehler = 1;
   }
 
*net gesehen hab*

Also das hab ich jetzt auch eingebaut ! Es geht, aber wenn ich jetzt sowas hochlade:

test.jpg.png.php.JPG

geht das auch, und darin ist ein php Code gespeichert !
 
Deswegen sollst du ja noch zusätzlich per getimagesize() prüfen, ob es eine Grafikdatei ist.

Ein Sicherheitsproblem ist das allemal nicht....solange die Dateiendung *.jpg auf dem Server nicht dafür vorgesehen ist, von PHP geparst zu werden(was eher ungewöhnlich wäre).
 
Zurück