Wie mache ich ein Upload Script sicher

PhoenixDH

Erfahrenes Mitglied
Habe ein Upload Script programmiert, jetzt hat mich aber jemand drauf hoingewiesen, das dieses Script sehr unsicher ist und man meine config.inc.php Datei auslesen könnte.

Jetzt meine Frage: Wie kann ich den Upload sicher machen ?
 
Ja, die Datei auf meinem Server hat die Endung php, aber es sollte Anhand eines Uploads Scripts welches ich auf meiner Seite für Mitglieder freigegeben habe möglich sein, an diese Inhalte ranzukommen, die Bestätigung habe ich das es geht !
 
Ehrlich gesagt weiß ich nicht was du jetzt als Antwort erwartest.
"Das Script" (von dem du redest) erklärt sich ohne Code recht
schlecht, und ich denke die wenigsten hier können Gedanken
lesen und/oder dein Script erraten.

Ich überlege grade was an einem Upload unsicher ist: Wozu
kann man den denn mißbrauchen?
 
Falls dein Skript den Upload von PHP-Dateien ermöglicht, solltest du schon zusehen, dass du verhinderst, dass hochgeladene Skripte von PHP verarbeitet werden, indem du bspw. per Addtype/Forcetype PHP-Skripte als Textdatei oder PHP-Source ausgeben lässt(kannst du per htaccess machen....explizit für dein Upload-Verzeichnis).
 
Zuletzt bearbeitet:
Die php Dateien die in einem jpg gespeichert sind werden nur als Text ausgegeben, es ist nur möglich irgendwie andere Dateien zu öffnen oder anzuzeigen irgendwie, keine Ahnung, ich poste mal den Code wenn ich wieder zu Hause bin !
 
Hier mein Code, laut dem Code ist es ja nicht Möglich PHP Dateien auf den Server zu übertragen, aber halt als JPG getarnt, also denke ich wurde es gemacht und irgendwie erreicht, das der Code in der getarnten jpg irgendwie ausgeführt worden ist. Die Ordnerrechte für meinen Ordner in dem die Bilder sin sind 777.

Gibt es eine Möglichkeit zu überprüfen, ob in dem Code auch wirklich sich ein Bild versteckt oder nur php-Code `?

Hier ist mein Quellcode:
Code:
$i=0; //Anfangswert für Dateien im Ordner
$err_msg = ''; //Keine Meldung am Anfang
$pic = ''; //Variable Bildausgabe

$pfad="bildupload/"; 
$verz=opendir ($pfad); 
while ($file=readdir($verz)) 
{ 
    if (filetype($pfad.$file)!="dir") 
    { 
        $i++; 
    } 
} 
closedir($verz); 

$i++;

if ($datei != '')
{
// Variablen:
$groesse = "100"; //Wie groß darf das Bild maximal sein(in KB)?
$fehler = 0;


//***  datei ist zu groß ***
if ($datei_size >= ($groesse * 1024))
   {
   $err_msg .= ' Ihr Bild ist leider zu groß: max. '.$groesse.' kb !<br><br>';
   $fehler = 1;
   }


//***  datei ist nicht erlaubt ***

$datei_ending = explode(".", $datei_name);
$datei_ending[1] = strtolower($datei_ending[1] );
if ( (!($datei_ending[1] == "png") )&&(!($datei_ending[1] == "gif") )&&(!($datei_ending[1] == "jpg") )&& (!($datei_ending[1] == "jpeg")))
   {
   $err_msg .= ' Ihr Bild ist keine zugelassene Datei. Zugelassene Dateiendungen sind: .JPEG,.PNG,.JPG,.GIF. !<br><br>';
   $fehler = 1;
   }


// *** datei ist ok ***
$name = "$pfad".$g_user['userid']."_".$i.".$datei_ending[1]";
if ($fehler == 0)
   {
   if(!empty($datei_name))
      {
      while (file_exists("$name"))
      {
      $i++;
      $name = "$pfad".$g_user['userid']."_".$i.".$datei_ending[1]";
      }
      copy($datei,"$pfad".$g_user['userid']."_".$i.".$datei_ending[1]");
      $pic .= '<br><img src="'.$pfad.$g_user['userid'].'_'.$i.'.'.$datei_ending[1].'"><br><br>';
      $err_msg .= '<br>Hochladen erfolgreich !<br><br>Kopieren Sie die folgende Zeile mit [STRG+C] und fügen Sie sie in den gewünschten Post mit [STRG+V] ein: <br><br>[ img]'.$config[board_baseurl].'/'.$pfad.$g_user['userid'].'_'.$i.'.'.$datei_ending[1].'[ /img]<br><br>';
      }
   }
}
 
Wenn ich eine Datei namens skript.jpg.php hochlade, erkennt dies dein Skript als Bild, obwohl es keines ist.....geprüft wird ja, was nach dem ersten Punkt steht...

Prüfe lieber per getimagesize(), das erkennt, ob es sich um ein Bild handelt...egal wie die Endung ist.
 
Zuletzt bearbeitet:
Zurück