Ingo Turski: Welche Datei-Endungen sind "kritisch"?

Hi,

mit "kritisch" meine ich, daß die Dateien serverseitig interpretiert werden könnten.

Ich sitze gerade an einem Upload-Script, das ich für verschiedene Server einsetzen will, und möchte vermeiden, daß die hochgeladenen Dateien bei Standardeinstellungen der Server irgend einen Schaden anrichten, sprich (bei Aufruf) irgendwelche Aktionen auslösen können.
Reicht es, *.php*, *.shtml, .ht* und für Windows-Server *.asp case-insensitive zu filtern oder welche Dateinamen könnten noch interpretiert werden?

Es geht mir nur um mögliche Beeinflussungen des Servers und ich möchte möglichst wenig Restriktionen einbauen, also ungern mit einer Positivliste arbeiten.

freundliche Grüße
Ingo

  1. hi,

    Es geht mir nur um mögliche Beeinflussungen des Servers und ich möchte möglichst wenig Restriktionen einbauen, also ungern mit einer Positivliste arbeiten.

    Wie wär's, wenn du verhinderst, dass die Dateien über HTTP abgerufen werden können?
    Also Download ebenfalls über ein PHP-Script, welches nach passendem Content-type Header die Daten einfach mittels readfile() an den Client ausgibt?

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hi,

      Wie wär's, wenn du verhinderst, dass die Dateien über HTTP abgerufen werden können?

      Das geht leider nicht überall, da ich nicht immer Zugriff auf die Konfiguration habe; so steht mir bei einem Windows-Server lediglich FTP-Zugriff für ein Unterverzeichnis und PHP zur Verfügung - noch nicht mal die Dateirechte kann ich dort ändern.

      Also Download ebenfalls über ein PHP-Script, welches nach passendem Content-type Header die Daten einfach mittels readfile() an den Client ausgibt?

      Ginge zwar, aber da ich das Verzeichnis wie gesagt nicht überall schützen kann, könnten die Dateien auch so aufgerufen werden.

      freundliche Grüße
      Ingo

      1. Hallo,

        .py kommt auch noch hinzu.

        Also Download ebenfalls über ein PHP-Script, welches nach passendem Content-type Header die Daten einfach mittels readfile() an den Client ausgibt?
        Ginge zwar, aber da ich das Verzeichnis wie gesagt nicht überall schützen kann, könnten die Dateien auch so aufgerufen werden.

        Du hast aber die Möglichkeit die Wahrscheinlichkeit, das entsprechende Verzeichnis ausfindig zu machen, gegen NULL zu führen.

        Gruß aus Berlin!
        eddi

        1. Hi,

          Du hast aber die Möglichkeit die Wahrscheinlichkeit, das entsprechende Verzeichnis ausfindig zu machen, gegen NULL zu führen.

          Nein, leider nicht, da es u.a. dazu dienen soll, beliebigen Personen den Download zu ermöglichen (und nur bestimmten den Upload).

          freundliche Grüße
          Ingo

          1. Re:

            Also Download ebenfalls über ein PHP-Script, welches nach passendem Content-type Header die Daten einfach mittels readfile() an den Client ausgibt?
            Ginge zwar, aber da ich das Verzeichnis wie gesagt nicht überall schützen kann, könnten die Dateien auch so aufgerufen werden.
            Du hast aber die Möglichkeit die Wahrscheinlichkeit, das entsprechende Verzeichnis ausfindig zu machen, gegen NULL zu führen.

            Nein, leider nicht, da es u.a. dazu dienen soll, beliebigen Personen den Download zu ermöglichen (und nur bestimmten den Upload).

            Das ist jetzt aber eine völlig andere Begründung als vorhin und steht wahsagas Vorschlag - readfile() zu nutzen - nicht im Wege.

            Gruß aus Berlin!
            eddi

        2. Hallo,

          .py kommt auch noch hinzu.

          Das hängt wohl sehr von der Konfiguration des Apachen und des Python Interpreters ab, aber eventuell sollte man dann .pyc (Python Bytecode) auch ausschliessen.

          Tim

          1. Hi,

            eventuell sollte man dann .pyc (Python Bytecode) auch ausschliessen.

            ok, danke - schadet ja nichts, das zu erweitern.
            Mein Liste sieht nun so aus:
            *.PHP*
            *.SHT*
            .HT*
            *.CLASS
            *.PY*
            *.JSP
            *.ASP
            wer noch was weiss...

            Und gibt's vielleicht auch eine Möglichkeit, über PHP Dateiendungen herauszubekommen, die für PHP und Apache bzw. IIS/4.0 eine Funktionalität haben?

            freundliche Grüße
            Ingo

            1. Hallo,

              *.PHP*
              *.SHT*
              .HT*
              *.CLASS
              *.PY*
              *.JSP
              *.ASP

              *.CGI
              *.DLL

              Gruß aus Berlin!
              eddi

              1. Hi,

                *.CGI

                in einem einfachen Verzeichnis?

                *.DLL

                und nur per http aufrufbar?

                freundliche Grüße
                Ingo

                1. Hallo,

                  *.CGI
                  in einem einfachen Verzeichnis?

                  Natürlich:

                    
                   AddHandler fastcgi-script .fcgi  
                   AddHandler cgi-script .cgi  
                   Options +FollowSymLinks +ExecCGI
                  

                  Manche haben das automatisch drinn.

                  Grüße
                  Jeena Paradies

                  1. Moi moin,

                    *.CGI
                    in einem einfachen Verzeichnis?

                      
                    
                    >  AddHandler fastcgi-script .fcgi  
                    >  AddHandler cgi-script .cgi  
                    >  Options +FollowSymLinks +ExecCGI
                    
                    

                    jups (selbes gilt auch für .pl; insbesondere, da es Perl auch als Apachemodul gibt)

                    *.DLL
                    und nur per http aufrufbar?

                    https://www.grc.com/x/ne.dll?bh0bkyd2

                    Gruß aus Berlin!
                    eddi

                    1. Hi,

                      AddHandler fastcgi-script .fcgi
                      AddHandler cgi-script .cgi
                      Options +FollowSymLinks +ExecCGI

                      danke Jeena.  
                        
                      
                      > jups (selbes gilt auch für .pl; insbesondere, da es Perl auch als Apachemodul gibt)  
                      
                      Ok, dann habe ich jetzt noch drei weitere Ausschlüsse.  
                        
                      
                      > > > > \*.DLL  
                      > > > und nur per http aufrufbar?  
                      >   
                      > <https://www.grc.com/x/ne.dll?bh0bkyd2>  
                      
                      Was soll mir das sagen? Sorry, aber ich blicke da nicht ganz durch.  
                      Aber die Testaussage "All attempts to get any information from your computer have FAILED. (This is very uncommon for a Windows networking-based PC.)" finde ich für mein WinXP schonmal ganz gut, auch wenn dann die Warnung kommt, daß Port 80 und 443 offen sind.  
                      Schöne Testseite, werde ich auch mal im Büro probieren - aber was sagt die nun über Gefahren für den (Windows-)Server von dll's aus, die per http aufgerufen werden?  
                        
                      freundliche Grüße  
                      Ingo
                      
                      -- 
                      [[barrierefreie Webseitenerstellung](http://www.1ngo.de/web/) » [Suchmaschinenoptimierung](http://www.1ngo.de/web/seo.html) | [em?](http://www.1ngo.de/web/em.html)] ([Hommingberger Gepardenforelle](http://www.1ngo.de/hommingberger-gepardenforelle/);-)
                      
                      1. Re:

                        *.DLL
                        und nur per http aufrufbar?

                        https://www.grc.com/x/ne.dll?bh0bkyd2

                        ^^^^

                        Was soll mir das sagen?

                        Mein Fehler - ich hätte besser keinen Verweis draus machen sollen. Es ging nur um die URI, die Dir Deine Frage beantwortet.

                        Gruß aus Berlin!
                        eddi

                        1. Hi,

                          https://www.grc.com/x/ne.dll?bh0bkyd2
                                                       ^^^^
                          Was soll mir das sagen?

                          Mein Fehler - ich hätte besser keinen Verweis draus machen sollen. Es ging nur um die URI, die Dir Deine Frage beantwortet.

                          hehe... ok, war aber vielleicht auch ganz gut so.

                          Ich habe jetzt folgende Funktion erstellt:

                          function secureURL($filename) {  
                            $x = 'bin'; $filename = trim($filename);  
                            
                            $ein = array('ä', 'ö', 'ü', 'ß', 'Ä', 'Ö', 'Ü', '&','§',   ' ','%20','%','<','>','|','/',':','?','*','"',chr(92),chr(10),chr(13));  
                            $aus = array('ae','oe','ue','ss','Ae','Oe','Ue','+','Par.','_','_',  '~','~','~','~','~','~','~','~','~','~',    '',     '');  
                            for ($i=0; $i<count($ein); $i++) {  
                              $filename = str_replace($ein[$i], $aus[$i], $filename);  
                            }  
                            
                            $filename = trim($filename, ".");  
                            if(!$filename) $filename = date("d-m-Y_H-i-s").'.'.$x;  
                            
                            $ext = strtolower(substr($filename, strrpos($filename, '.')+1));  
                            $test = array('php','shtm','htm','class','cgi','fcgi','pl','py','jsp','asp','dll');  
                            for ($i=0; $i<count($test); $i++) {  
                              if(substr($ext,0,strlen($test[$i])) == $test[$i]) $filename .= '.'.$x;  
                            }  
                            
                            return urlencode($filename);  
                          }
                          

                          könnt Ihr auch gern mal hier ausprobieren.
                          Vielleicht ist auch einiges überflüssig oder umständlich...
                          Das Ziel ist wie gesagt, den übertragenen Dateinamen möglichst zu verwenden, zur Weitergabe URL-tauglich zu machen und Beeinflussungen des Servers zu vermeiden.

                          Übrigens habe ich festgestellt, daß eine Datei wie test.php.xxx unter meiner normalen xampp-Installation ausgeführt wird!? Deshalb (und um einen Download von Dateien mit umbenannten Endungen zu forcieren) habe ich mal .bin angehängt.

                          freundliche Grüße
                          Ingo

                          1. Re:

                              
                            function secureURL($filename=FALSE) {  
                              $x = 'bin';  
                              if($filename===FALSE)  
                                date("d-m-Y_H-i-s").'.'.$x;  
                              else{  
                                $ein = array('ä', 'ö', 'ü', 'ß', 'Ä', 'Ö', 'Ü', '&','§',   ' ','%20','%','<','>','|','/',':','?','*','"',chr(92),chr(10),chr(13));  
                                $aus = array('ae','oe','ue','ss','Ae','Oe','Ue','+','Par.','_','_',  '~','~','~','~','~','~','~','~','~','~',    '',     '');  
                                $filename = str_replace($ein,$aus,$filename);  
                              }  
                              $ext = strtolower(substr($filename, strrpos($filename, '.')+1));  
                              $test = array('php','shtm','htm','class','cgi','fcgi','pl','py','jsp','asp','dll');  
                              
                              for ($i=0; $i<count($test); $i++) {  
                                if(strpos($test[$i],$ext)===0)  
                                  $filename .= '.'.$x;  
                              }  
                              return urlencode($filename);  
                            }
                            

                            Gruß aus Berlin!
                            eddi

                            --
                            Achte die Kleinigkeiten, aber liebe das Detail!
                            1. Hi,

                              function secureURL($filename=FALSE) {

                              könntest Du mir das wohl erklären?

                              if($filename===FALSE)

                              ist das nicht etwas zu früh? Was, wenn "." übergeben wurde?

                              $filename = str_replace($ein,$aus,$filename);

                              das geht wirklich? Ich hab' ja schon gemerkt, daß PHP einem so einiges abnimmt...

                              if(strpos($test[$i],$ext)===0)

                              clever - aber das würde dann doch auch harmlose Zeichenketten in der Mitte betreffen.

                              Mein Server tut's übrigens noch - trotz einiger Versuche, die ich noch nicht ganz verstehe.
                              Ich wundere mich allerdings, daß bei Anforderung von 'Mail_Mime-1.3.1.cgi.bin' Forbidden kommt (bei Stanardeinstellung von all-inkl.com). Sollte ich '.cgi' besser ganz löschen? Ist ja blöd, wenn eine hochgeladene Datei nicht abgerufen werden kann.

                              freundliche Grüße
                              Ingo

                              1. Re:

                                function secureURL($filename=FALSE) {
                                könntest Du mir das wohl erklären?

                                Deine ursprüngliche Funktion:

                                  
                                function secureURL($filename) {  
                                  $x = 'bin'; $filename = trim($filename);  
                                  
                                  $ein = array('ä', 'ö', 'ü', 'ß', 'Ä', 'Ö', 'Ü', '&','§',   ' ','%20','%','<','>','|','/',':','?','*','"',chr(92),chr(10),chr(13));  
                                  $aus = array('ae','oe','ue','ss','Ae','Oe','Ue','+','Par.','_','_',  '~','~','~','~','~','~','~','~','~','~',    '',     '');  
                                  for ($i=0; $i<count($ein); $i++) {  
                                    $filename = str_replace($ein[$i], $aus[$i], $filename);  
                                  }  
                                  
                                  $filename = trim($filename, ".");  
                                  if(!$filename) $filename = date("d-m-Y_H-i-s").'.'.$x;  
                                  
                                /** An dieser Stelle wird in Deiner Funktion abgefragt, ob der Dateiname als Boolenschen Wert "TRUE" oder "FALSE" ergibt. Ich habe keine Ahnung, was Du Dir davon versprichst, noch ob Dir klar ist, welche Werte hier zu "FALSE" führen können.  
                                Deshalb habe ich mir derart einen Reim daraus gemacht, daß Du vielleicht auch einen Leerstring Deiner Funktion übergeben magst, damit ein eigenständiger Name aus der aktuellen Zeit gebildet wird. Daher habe ich die Funktion komplett anders aufgebaut, sodas sie auch ohne Parameter aufgerufen werden kann, wenn eine andere Routine Deines Scripts bestimmt, daß der via HTTP angelieferte Name nicht verwendet werden soll */  
                                  
                                  $ext = strtolower(substr($filename, strrpos($filename, '.')+1));  
                                  $test = array('php','shtm','htm','class','cgi','fcgi','pl','py','jsp','asp','dll');  
                                  for ($i=0; $i<count($test); $i++) {  
                                    if(substr($ext,0,strlen($test[$i])) == $test[$i]) $filename .= '.'.$x;  
                                  }  
                                  
                                  return urlencode($filename);  
                                }
                                

                                $filename = trim($filename, ".");
                                  if($filename===FALSE)

                                ist das nicht etwas zu früh? Was, wenn "." übergeben wurde?

                                Da habe ich geschlampt! Vorher sollte natürlich trim(STR,'.'); aufgerufen werden.

                                if(strpos($test[$i],$ext)===0)
                                clever - aber das würde dann doch auch harmlose Zeichenketten in der Mitte betreffen.

                                Deine Definition der mit '.bin' zu erweiternden Datein enthält "php". So werden gleichefalls alle Datein , die auf "php3", "php4" und "php5" enden, erfaßt. Was Du mit "harmlosen Zeichen in der Mitte" meinst, da substr($filename, strrpos($filename, '.')+1) den letzten Punkt des Dateinamen sucht und ab dieser Position die abzuprüfenden Erweiterung bildet, ist mir wiederum nicht klar.

                                Ich wundere mich allerdings, daß bei Anforderung von 'Mail_Mime-1.3.1.cgi.bin' Forbidden kommt (bei Stanardeinstellung von all-inkl.com). Sollte ich '.cgi' besser ganz löschen? Ist ja blöd, wenn eine hochgeladene Datei nicht abgerufen werden kann.

                                Diesen Fehler habe ich produziert und mich auch gewundert, was da schief läuft. Allerdings habe ich auch keine einleuchtende Erklärung parat.
                                 Vermutlich wird es das Beste sein die brisanten Endungen zu entfernen.

                                Gruß aus Berlin!
                                eddi

                                --
                                Achte die Kleinigkeiten, aber liebe das Detail!
                                1. Hi,

                                  $filename = trim($filename, ".");
                                    if(!$filename) $filename = date("d-m-Y_H-i-s").'.'.$x;

                                  /** An dieser Stelle wird in Deiner Funktion abgefragt, ob der Dateiname als Boolenschen Wert "TRUE" oder "FALSE" ergibt. Ich habe keine Ahnung, was Du Dir davon versprichst, noch ob Dir klar ist, welche Werte hier zu "FALSE" führen können.

                                  Ich verspreche mir davon, einen Leerstring zu ersetzen; und ja: mir ist klar, daß ich damit auch "0" ausschließe und Leerzeichen true ergeben (aber die wurden ja ohnhin schon konvertiert).

                                  Deshalb habe ich mir derart einen Reim daraus gemacht, daß Du vielleicht auch einen Leerstring Deiner Funktion übergeben magst, damit ein eigenständiger Name aus der aktuellen Zeit gebildet wird.

                                  Nicht ich, sondern der User. Hieraus soll ein brauchbarer Dateiname gemacht werden.

                                  Was Du mit "harmlosen Zeichen in der Mitte" meinst, da substr($filename, strrpos($filename, '.')+1) den letzten Punkt des Dateinamen sucht und ab dieser Position die abzuprüfenden Erweiterung bildet, ist mir wiederum nicht klar.

                                  Stimmt, das hatte ich übersehen, sorry.

                                  Ich wundere mich allerdings, daß bei Anforderung von 'Mail_Mime-1.3.1.cgi.bin' Forbidden kommt (bei Stanardeinstellung von all-inkl.com). Sollte ich '.cgi' besser ganz löschen? Ist ja blöd, wenn eine hochgeladene Datei nicht abgerufen werden kann.

                                  Diesen Fehler habe ich produziert und mich auch gewundert, was da schief läuft. Allerdings habe ich auch keine einleuchtende Erklärung parat.

                                  Ich tippe inzwischen auf eine simple RegEx in der Serverkonfiguration, um auszuschließen, daß cgi und pl außerhalb des hierfür zugelassenen Verzeichnisses aufgerufen werden.

                                  freundliche Grüße
                                  Ingo

                          2. Hi,

                            Übrigens habe ich festgestellt, daß eine Datei wie test.php.xxx unter meiner normalen xampp-Installation ausgeführt wird!?

                            Da könnte content-negotiation dran schuld sein.
                            (und es ist ein Zeichen dafür, daß praktisch JEDE Endung "gefährlich" sein kann, wie bereits erwähnt ...)

                            cu,
                            Andreas

                            --
                            Warum nennt sich Andreas hier MudGuard?
                            Schreinerei Waechter
                            O o ostern ...
                            Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
                            1. Hi,

                              Übrigens habe ich festgestellt, daß eine Datei wie test.php.xxx unter meiner normalen xampp-Installation ausgeführt wird!?

                              Da könnte content-negotiation dran schuld sein.
                              (und es ist ein Zeichen dafür, daß praktisch JEDE Endung "gefährlich" sein kann, wie bereits erwähnt ...)

                              Nein, ist es nicht.
                              Ich habe das mal eingehender getestet und der Apache gewährt auf jegliche Dateien mit ".cgi." sowie ".pl." mitten im Dateinamen keinen Zugriff - auch wenn ich eine reine Text-Datei als "test.pl.txt" speichere.
                              Das bedeutet, daß ich diese Zeichenketten aus dem Namen entfernen oder ersetzen muß, da die Uploads ja sonst nicht verfügbar sind.

                              freundliche Grüße
                              Ingo

                              1. Hi Ingo,

                                Das bedeutet, daß ich diese Zeichenketten aus dem Namen entfernen oder ersetzen muß, da die Uploads ja sonst nicht verfügbar sind.

                                Ich finde, dass du das Problem falsch angehst - ich würde das Grund her anders aufziehen und damit (wie ich zumindest denke) einige Probleme umgehen. Ich erklär einfach mal, wie ich das mal gemacht habe:

                                Zuerst werden die Dateien upgeloaded über ein Formular - in dem Dateinamen werden sämtliche nicht alpha-numerischen Zeichen durch einen Unterstrich ersetzt, aus "Fröhliche Ostern.doc" würde also "Fr_hliche_Ostern.doc" (natürlich ließe sich das auch so machen, dass Umlaute gesondert behandelt werden und zu ae, oe oder ue umgebastelt werden).
                                Dann wird die Datei in einem Verzeichnis außerhalb des Document Roots oder in einem Verzeichnis, welches mit Deny from All gegen einen Aufruf von außen geschützt ist. Der Dateiname setzt sich bei mir wie folgt zusammen: OriginalDateiName.endung+Zustand1+Besitzer. Zustand1 ist in meinem Fall 0 oder 1 und gibt an, ob die Datei gesperrt ist (gegen Download) oder nicht, es lassen sich natürlich noch weitere Zustände einbauen, das Plus-Zeichen trennt die "Felder". Besitzer ist der Username der Person (alternativ auch UserID), welche die Datei hochgeladen hat - also sozusagen der virtuelle Besitzer, wem die Datei im Filesystem des Servers gehört, hat damit gar nichts zu tun.

                                Der Download erfolgt dann über ein PHP Script, welches mit download.php?file=foobar.txt oder download.php/foobar.txt aufgerufen wird (wird kein mod_rewrite benötigt). Das Script sucht sich dann den vollständigen Dateinamen, nimmt diesen mit explode("+", $filename); auseinander, kann nach belieben Zustände prüfen und darauf reagieren - in meinem Fall würde der Download verweigert, wenn Zustand1 auf 1 gesetzt wäre und die Datei also gesperrt wäre.
                                Wenn aber alles ok ist und die Datei downgeloaded werden kann, wird sie einfach durchgeschleust.

                                Über die Information des Besitzers im Dateinamen kann man den Usern die Möglichkeit geben Ihre eigenen Dateien auch wieder zu löschen. Für dieses Beispiel braucht man keine MySQL Datenbank o.ä. - es werden einfach alle Informationen im Dateinamen gespeichert. Die Userverwaltung kannst du im Prinzip mit einem beliebigen Apache Auth-Modul laufen lassen.
                                Da die Dateien nicht übers Web aufgerufen werden können und ich beim Upload darauf achte, dass kein x-Bit für die Datei gesetzt wird, können die Dateien/Scripte/Programme nicht ausgeführt werden, das Download Script greift nur lesend auf die Dateien zu und schleust die Daten durch.

                                MfG, Dennis.

                                1. Hi Dennis,

                                  aus "Fröhliche Ostern.doc" würde also "Fr_hliche_Ostern.doc" (natürlich ließe sich das auch so machen, dass Umlaute gesondert behandelt werden und zu ae, oe oder ue umgebastelt werden).

                                  ... so wie ich es mache; ich finde das wesentlich angenehmer zu lesen.

                                  Dann wird die Datei in einem Verzeichnis außerhalb des Document Roots oder in einem Verzeichnis, welches mit Deny from All gegen einen Aufruf von außen geschützt ist.

                                  Da hast Du überlesen, daß ich das Script insbesondere auch auf einem Windows-Server einsetze, auf dem ich weder solche Rechte vergeben kann, noch ausserhalb meines Userverzeichnisses agieren kann.

                                  Der Download erfolgt dann über ein PHP Script, welches mit download.php?file=foobar.txt oder download.php/foobar.txt aufgerufen wird (wird kein mod_rewrite benötigt).

                                  Das ist ohne mod_rewrite recht unschön und ich müßte mich auch noch um die passenden Header kümmern. Aber grundsätzlich ist das schon eine sinnvolle Alternative.

                                  freundliche Grüße
                                  Ingo

  2. Hi,

    mit "kritisch" meine ich, daß die Dateien serverseitig interpretiert werden könnten.

    Das hängt von der Serverkonfiguration ab.

    Ich sitze gerade an einem Upload-Script, das ich für verschiedene Server einsetzen will, und möchte vermeiden, daß die hochgeladenen Dateien bei Standardeinstellungen der Server irgend einen Schaden anrichten, sprich (bei Aufruf) irgendwelche Aktionen auslösen können.
    Reicht es, *.php*, *.shtml, .ht* und für Windows-Server *.asp case-insensitive zu filtern oder welche Dateinamen könnten noch interpretiert werden?

    .pl, .cgi, .class, .jsp, .blablubb, .whatever
    (siehe oben)

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hi,

      Das hängt von der Serverkonfiguration ab.

      ist mir schon klar - deshalb sagte ich ja auch "bei Standardeinstellungen der Server".

      .pl, .cgi,

      werden diese Dateien normalerweise nicht nur in bestimmten, vordefinierten Verzeichnissen ausgeführt?

      .class, .jsp,

      Können diese Dateien bei direktem HTTP-Aufruf etwas anrichten?

      .whatever

      genau die würden mich interessieren. ;-)

      freundliche Grüße
      Ingo

      1. Hi,

        Das hängt von der Serverkonfiguration ab.
        ist mir schon klar - deshalb sagte ich ja auch "bei Standardeinstellungen der Server".

        welche Bedeutung hat für Dich die Standardeinstellung eines Servers, außer beim Vorliegen eines Servers, von dessen Einstellung Du weißt, dass sie nicht verändert wurde?

        Anders gesagt: Deine Bedingung ist rein willkürlicher Natur. Richte Dich entweder nach einem speziellen Server, dessen Konfiguration Du ermitteln kannst, oder rechne mit allem, nicht nur mit einem Sonderfall.

        .pl, .cgi,
        werden diese Dateien normalerweise nicht nur in bestimmten, vordefinierten Verzeichnissen ausgeführt?

        Ja, sie werden normalerweise nicht nur in bestimmten, vordefinierten Verzeichnissen ausgeführt

        .class, .jsp,
        Können diese Dateien bei direktem HTTP-Aufruf etwas anrichten?

        Sicher.

        .whatever
        genau die würden mich interessieren. ;-)

        MudGuard wollte Dir sagen, dass _jede_ Endung "kritisch" sein kann und entsprechend betrachtet werden muss. Beachte Jeenas Vorschlag.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Hi,

          welche Bedeutung hat für Dich die Standardeinstellung eines Servers, außer beim Vorliegen eines Servers, von dessen Einstellung Du weißt, dass sie nicht verändert wurde?

          es ist zumindest ein Anfang und taugt für den Fall, daß eben keine individuellen Einstellungen vorgenommen sind.
          Oder anders herum: ich bräuchte nur in Erfahrung zu bringen, ob und ggfls. welche Einstellungen vorgenommen wurden.

          .class, .jsp,
          Können diese Dateien bei direktem HTTP-Aufruf etwas anrichten?

          Sicher.

          Ok, danke. Auch eddi für .py.

          freundliche Grüße
          Ingo

  3. Hallo,

    Du könntest jeder Datei die hochgeladen wird die Endung .1ngo geben zum beispiwl boesesscript.cgi.1ngo und beim ausliefern machst du das .1ngo einfach wieder weg.

    Grüße
    Jeena Paradies

    1. Hi,

      Du könntest jeder Datei die hochgeladen wird die Endung .1ngo geben zum beispiwl boesesscript.cgi.1ngo und beim ausliefern machst du das .1ngo einfach wieder weg.

      eine mögliche, aber auch leider recht umständliche Möglichkeit, besonders wenn ich passende Mime-Typen mit ausliefern will.

      freundliche Grüße
      Ingo

      1. hi,

        Du könntest jeder Datei die hochgeladen wird die Endung .1ngo geben zum beispiwl boesesscript.cgi.1ngo und beim ausliefern machst du das .1ngo einfach wieder weg.
        eine mögliche, aber auch leider recht umständliche Möglichkeit, besonders wenn ich passende Mime-Typen mit ausliefern will.

        Wonach willst du den Mime-Type ermitteln?
        Nach der Dateiendung? Dann denke dir dazu das .ingo wieder weg, und es ist wieder so wie vorher.

        Oder mime_content_type()? Die Funktion interessiert sich wenig für Dateiendungen, die schaut sich die Dateiinhalte an.
        (Die Funktion ist allerdings deprecated,
        "This extension has been deprecated as the PECL extension fileinfo provides the same functionality (and more) in a much cleaner way.")

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Hi,

          Oder mime_content_type()? Die Funktion interessiert sich wenig für Dateiendungen, die schaut sich die Dateiinhalte an.
          (Die Funktion ist allerdings deprecated,

          und liefert auf (m)einem Windows-Server mit PHP 4.3.7 "Fatal error: Call to undefined function: mime_content_type()".

          "This extension has been deprecated as the PECL extension fileinfo provides the same functionality (and more) in a much cleaner way.")

          dürfte ich dann dort auch nicht nutzen können :-(...

          freundliche Grüße
          Ingo

          1. echo $begrüßung;

            und liefert auf (m)einem Windows-Server mit PHP 4.3.7 "Fatal error: Call to undefined function: mime_content_type()".

            Da musst du mal die dafür zuständige Extension einbinden. Wenn sich in einem Unterverzeichnis des PHP-Installationsverzeichnisses, meist extensions genannt, eine Datei namens php_magic_mime.dll findest, musst du sie nur noch in der php.ini entkommentieren. Gegebenenfalls muss auch noch der Pfad zu diesem Extensions-Verzeichnis angepasst werden. Wenn PHP als Apache-Modul läuft ist noch der Apache zu restarten. Wenn du diese Datei nicht finden solltest, lade dir die Windows-Binary (also nicht die Installer-Version) herunter, da ist sie mit drin. (Es kann dann noch zu Fehlermeldungen kommen, das diese Datei nicht geladen werden kann. Dann findet PHP entweder diese Datei nicht oder weitere DLLs. Diese sind dann im Verzeichnis dlls des Archivs zu finden und an eine passende Stelle zu kopieren - entweder in das Verzeichnis der php.exe oder .dll, oder zur Not nach windows/system32.)

            echo "$verabschiedung $name";

            1. Hi,

              Da musst du mal die dafür zuständige Extension einbinden.

              wie ich schon sagte: ich suche eine Lösung für sehr begrenzte Rechte wie insb. auf nur ein Userverzeichnis eines Windows-Servers; da bin ich schon froh, daß die überhaupt PHP zur Nutzung zur Verfügung gestellt haben.

              freundliche Grüße
              Ingo

      2. Hallo Ingo.

        Du könntest jeder Datei die hochgeladen wird die Endung .1ngo geben zum beispiwl boesesscript.cgi.1ngo und beim ausliefern machst du das .1ngo einfach wieder weg.
        eine mögliche, aber auch leider recht umständliche Möglichkeit, besonders wenn ich passende Mime-Typen mit ausliefern will.

        Weshalb?

        <?php  
          
        $str_file = 'script.php.1ngo';  
          
        // Vorausgesetzt natürlich, du nutzt mime_content_type()  
        echo mime_content_type(str_replace('.1ngo', '', $str_file)); // Wahlweise natürlich auch per substr()  
          
        ?>
        

        Einen schönen Freitag noch.

        Gruß, Ashura

        --
        sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
        mathbr:del.icio.us/ mathbr:w00t/
        1. Hallo.

          <?php

          $str_file = 'script.php.1ngo';

          // Vorausgesetzt natürlich, du nutzt mime_content_type()
          echo mime_content_type(str_replace('.1ngo', '', $str_file)); // Wahlweise natürlich auch per substr()

          ?>

            
          Funktionieren müsste es auf jeden Fall, tut es bei mir aber nicht.  
            
          Wie kann ich feststellen, ob die jeweilige mime-Datei ausgewertet wird?  
          Ich habe eben erst mime\_magic zu den zu ladenden Modulen hinzugefügt, aber mime\_content\_type() liefert, egal bei welcher Datei, stets sprichwörtlich „nichts“ zurück.  
            
            
          Einen schönen Freitag noch.  
            
          Gruß, Ashura  
          
          -- 
          sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|  
          [<mathbr:del.icio.us/>](http://del.icio.us/mathbr) [<mathbr:w00t/>](http://w00t.noctus.net)
          
          1. hi,

            Wie kann ich feststellen, ob die jeweilige mime-Datei ausgewertet wird?
            Ich habe eben erst mime_magic zu den zu ladenden Modulen hinzugefügt, aber mime_content_type() liefert, egal bei welcher Datei, stets sprichwörtlich „nichts“ zurück.

            Welche mime-Datei verwendet wird, sollte dir phpinfo() verraten.

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
            1. Hallo wahsaga.

              Welche mime-Datei verwendet wird, sollte dir phpinfo() verraten.

              Ah, vielen Dank.

              Darin stand, dass die Datei „/usr/share/misc/file/magic.mime“ verwendet würde, welche bei nicht existiert.
              Nach Anlegen eines Symlinks auf /etc/magic-mime und einem Server-Neustart funktioniert es nun.

              Und ja, mime_content_type() geht in der Tat nach dem Inhalt. (Könnte es sein, dass dies nur unter Windows nicht der Fall ist?)

              Einen schönen Freitag noch.

              Gruß, Ashura

              --
              sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
              mathbr:del.icio.us/ mathbr:w00t/
      3. echo $begrüßung;

        Du könntest jeder Datei die hochgeladen wird die Endung .1ngo geben zum beispiwl boesesscript.cgi.1ngo und beim ausliefern machst du das .1ngo einfach wieder weg.
        eine mögliche, aber auch leider recht umständliche Möglichkeit, besonders wenn ich passende Mime-Typen mit ausliefern will.

        Um den Mimetype zu ermitteln musst du entweder eine Inhaltsanalyse durchführen oder dich auf die Aussagekraft der "Second Level"-Dateinamenserweiterung verlassen. Wenn du den .1ngo-Weg gehst, brauchst du sowieso ein Download-Script, um einen anderen Mime-Type anzugeben, als der Server für .1ngo nehmen würde.

        echo "$verabschiedung $name";