Hagis: Upload von ausführbaren Skripts verhindern

Hallo,
ich habe mit PHP ein kleines Upload-Skript erstellt, das Dateien von einem Benutzer in einem Verzeichnis auf dem Webserver speichert.
Da die Dateien nach dem Upload sofort direkt zur Verfügung stehen, muss ich ausführbaren Skripts (also Dateien, die vom Webserver (Apache) an einen Parser o.ä. übergeben werden) die Endung .txt verpassen.

Mein Problem ist nun diese Dateien (an der Dateiendung) zu erkennen. Gibt es keine Umgebungsvariable in PHP, die mir alle "ausführbaren" Dateiendungen auflistet (.php, .php4, .phtml etc.)? Oder vielleicht eine andere Lösung?

Eine Lösung per htaccess (php_flag engine off) scheint bei meinem Hoster leider nicht zu funktionieren, oder mache ich was falsch?

Gruss Hagis

  1. Hallo Hagis,

    Mein Problem ist nun diese Dateien (an der Dateiendung) zu erkennen. Gibt es keine Umgebungsvariable in PHP, die mir alle "ausführbaren" Dateiendungen auflistet (.php, .php4, .phtml etc.)? Oder vielleicht eine andere Lösung?

    Dreh es doch um: erlaube nur Endungen, bei denen du sicher bist, dass sie ungefährlich sind.

    Gruß,
    Severin

    --
    They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety.
    -- Benjamin Franklin
    1. Dreh es doch um: erlaube nur Endungen, bei denen du sicher bist, dass sie ungefährlich sind.

      Ja, daran habe ich auch schon gedacht, aber die Liste würde ziemlich lang und Dateiendungen sind nunmal eigentlich nicht wichtig (ausser eben für Apache). D.h. jeder kann eine Dateiendung erfinden und Dateien damit versehen (jedenfalls zB bei Linux Systemen), denjenigen will ich nicht vorm Glück stehen (:
      Nein im Ernst, es muss doch möglich sein die Endungen von Skripts aus einer Umgebungsvariable auszulesen!?
      Falls dies tatsächlich nicht möglich sein sollte müsste ich jedoch den umgekehrten Weg gehen.

      besten Dank,
      Gruss Hagis

      1. Hai Hagis,

        normalerweise kommt man an die httpd.conf des Apachen, und dort sind alle Dateiendungen notiert, und was der Indianer damit machen soll, sonst wüsste er es ja auch nicht.

        mbG Rolf

      2. Hallo Hagis,

        Nein im Ernst, es muss doch möglich sein die Endungen von Skripts aus einer Umgebungsvariable auszulesen!?

        Mir ist kein guter Weg bekannt (abgesehen davon in der httpd.conf nachzusehen).

        Falls dies tatsächlich nicht möglich sein sollte müsste ich jedoch den umgekehrten Weg gehen.

        Eine Moeglichkeit ist noch das Uploadverzeichnis via .htaccess fuer allen zu verbieten (deny from all) und eine Datei zu schreiben, die Dateien aus dem Uploadverzeichnis liest und direkt an den Client schickt.
        Zum Senden der Datei hilft dir vielleicht dieses Codeschnipsel:

          
        // das ist noetig damit der download via SSL auch fuer en IE funktioniert  
        session_cache_limiter("must-revalidate");  
        // $file muss den vollen Pfad zur Datei enthalten.  
        // z.B.: /home/www/projekt/uploads/file.ext  
        header('Content-Description: File Transfer');  
        header('Content-Type: application/octet-stream');  
        header('Content-Length: ' . filesize($file));  
        header("Content-Disposition: attachment; filename=\"".basename($file)."\";");  
        @readfile($file) or die()  
        
        

        Gruß,
        Severin

        --
        They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety.
        -- Benjamin Franklin
        1. Mir ist kein guter Weg bekannt (abgesehen davon in der httpd.conf nachzusehen).

          Die Config ist bei meinem Hoster nicht einsehbar, aber der Support könnte sicher Auskunft liefern.

          Eine Moeglichkeit ist noch das Uploadverzeichnis via .htaccess fuer allen zu verbieten (deny from all) und eine Datei zu schreiben, die Dateien aus dem Uploadverzeichnis liest und direkt an den Client schickt.
          Zum Senden der Datei hilft dir vielleicht dieses Codeschnipsel:

          Diese Lösung wäre sehr elegant und professionell, vorausgesetzt der Override ist richtig eingestellt damit htaccess funktioniert (werde ich gleich prüfen). Allerdings ist diese Variante auch etwas aufwändiger, aber das wäre zu schaffen (: Auf jeden Fall Danke für den PHP Code.

          Danke an alle und schönes Wochenende
          Gruss
          Hagis