PHP *.php Datei nicht ausführen sondern downloaden/darstellen

Teiby

Lt. Commander
Registriert
Sep. 2008
Beiträge
1.727
Hallo.

Ich hab im Internet ein einfaches Uploadscript für Bilder gefunden. Da dieses Script nur für Bilder gedacht ist, hab ich noch paar Abfragen rausbauen müssen, damit ich jede Datei hochladen kann.

Nun hab ich mal ausgetestet und herausgefunden, das man ja auch php Daten hochladen kann und diese man dann auch ausführen werden, wenn man die php Datei downloaden will. Dies soll aber nicht so sein, da dies ein ziemlich hohes Sicherheitsrisiko darstellt.

Gibt es irgendeine Funktion (vielleicht mit .htaccess), mit der man verhindert, das solche Daten ausgeführt werden. Am besten wäre es, wenn man die Datei downloaden kann oder der Inhalt (Quellcode) angezeigt wird ohne das dieser ausgeführt wird.

Alternativ muss ich die Daten filtern und verhindern das man diese hochladen kann. Außer php, welche sollte man noch blocken?

Danke schonmal.
 
Zuletzt bearbeitet:
Am simpelsten wäre es die .php-Datei per PHP in einen ZIP-Ordner zu stecken und diesen dann herunterzuladen.
Ich persönlich würde diese Lösung anwenden.

Man kann aber auch ganz primitiv die Datei umbenennen, also einfach ein .txt anhängen, dann kann man sich den Inhalt anzeigen lassen.

Alternativ muss ich die Daten filtern und verhindern das man diese hochladen kann. Außer php, welche sollte man noch blocken?
Blockiere doch alle Dateiendungen und lasse nur die zu für die dein Script auch gedacht war.
Beispielsweise lässt du für Bilder nur bestimmte Bildformate (.png;.jpg;.bmp;...) zu.
 
Zuletzt bearbeitet:
@Teiby1: Es handelt sich vermutlich um ein PHP-Script? Aber ohne es zu sehen fällt es schwer, dir z sagen, wo du ansetzen musst. Ansonsten ist das die Anlaufstelle für eigene Recherche:
http://php.net/manual/en/features.file-upload.php.

Ich würde auch eher auf eine White-List statt auf eine Black-List setzen, also nur z.B. JPG, JPEG, PNG, ... erlauben...

siehe auch der Code hier:
PHP:
php 
   // begin Dave B's Q&D file upload security code 
  $allowedExtensions = array("txt","csv","htm","html","xml", 
    "css","doc","xls","rtf","ppt","pdf","swf","flv","avi", 
    "wmv","mov","jpg","jpeg","gif","png"); 
  foreach ($_FILES as $file) { 
    if ($file['tmp_name'] > '') { 
      if (!in_array(end(explode(".", 
            strtolower($file['name']))), 
            $allowedExtensions)) { 
       die($file['name'].' is an invalid file type!<br/>'. 
        '<a href="javascript:history.go(-1);">'. 
        '&lt;&lt Go Back</a>'); 
      } 
    } 
  }
(Kopiert von der verlinkten Seite)

@Adam Gontier: So ganz klar erscheint mir der Zusammenhang zur Problemstellung ehrlich gesagt nicht, zumindest vom zweiten Absatz... oder anders gesagt. Man kann diverse Sachen machen, aber das Problem sind nicht die Möglichkeiten, sondern wie man sie überhaupt in das bestehende Scriipt integrieren kann...
 
Ok yap... aber das Problem dürfte hier eher die Integration in das bestehende Script dasrstellen ... also die Erkennung erlaubter / verbotener Dateien. Das "was" dürfte ja dann ein untergeordnetes Problem sein..
 
Das beste wäre doch, wenn hoch geladene *.php Dateien automatisch in *.phps umbenannt werden.
 
Im Script wurde das Problem schon mit einer White-List behoben, da es ja mal für Bilder gedacht war. Ich will das ganze aber mit ner Blacklist angehen (was spricht dagegen?) damit man schnell irgendwas hochladen kann ohne in Zip oder so zu packen. Das ganze läuft auch nur im "freundschaftlichen Umfeld" und ist zurzeit noch Passwortgeschützt über ".htaccess".

Die Idee mit der Umbenennung ist auch nicht schlecht. Dachte nur da gibt es noch ne einfachere Lösung.

Edit:
Also die Umbenennung hat funktioniert (war ähnlich schon vorhanden). "php" wird nun zu "php.txt". Sollte man mit html auch machen oder? Welche noch?
 
Zuletzt bearbeitet:
Teiby1 schrieb:
Im Script wurde das Problem schon mit einer White-List behoben, da es ja mal für Bilder gedacht war. Ich will das ganze aber mit ner Blacklist angehen (was spricht dagegen?) damit man schnell irgendwas hochladen kann ohne in Zip oder so zu packen. Das ganze läuft auch nur im "freundschaftlichen Umfeld" und ist zurzeit noch Passwortgeschützt über ".htaccess".

Die Idee mit der Umbenennung ist auch nicht schlecht. Dachte nur da gibt es noch ne einfachere Lösung.

Deine Bedenken waren u.A. auch sicherheitstechnische, laut deinem Eingangspost. Was gegen Blacklist sprich: Woher willst du wissen, was dein Server alles ausführen kann? Es könnten noch sonstige Skripts hochgeladen werden, die dann nur durch aufrufen ausgeführt werden.

So viele gängige Bildformate gibt es auch nicht, da es sich ja scheinbar nur um Bilder handelt. Deswegen ist eine Whitelist das Beste. Du könntest auch beides kombinieren, per Whitelist normale Dateien erlauben und alle anderen Dateien werden dann von php gezippt abgespeichert. Das dürfte für die Benutzer das komfortabelste sein.

Einfacher als umbenennen geht es aber wirklich nicht meiner Meinung nach, aber selbst da müsstest du mit entweder einer Blacklist oder Whitelist arbeiten, wenn du nicht alles umbenennen willst. Also wenn dann gleich anständig gezippt :)
 
hey coole Idee mit dem automatischen zippen. Wusste garnicht das sowas geht. Ja also dann Whitelist und der Rest wird gezippt. Meld mich wieder wenns funktioniert :>
Ergänzung ()

Es hat zwar nun ne Stunde gedauert, aber trotz meiner nicht vorhandenen php Kenntnissen fast auf Anhieb hinbekommen. Funktioniert nun so wie gedacht mit Whitelist und der rest wird gezippt. Und so nebenher hab ich auch noch das Uploadlimit auf 3GB gesetzt und Timeout auf 3 Stunden :>
 
Zuletzt bearbeitet:
Teiby1;12587503 [automerge schrieb:
1345952520[/automerge]
Es hat zwar nun ne Stunde gedauert, aber trotz meiner nicht vorhandenen php Kenntnissen fast auf Anhieb hinbekommen. Funktioniert nun so wie gedacht mit Whitelist und der rest wird gezippt. Und so nebenher hab ich auch noch das Uploadlimit auf 3GB gesetzt und Timeout auf 3 Stunden :>

Eine Stunde ist doch nichts ;)
 
Zurück
Oben