nadja125: Bestimmte Dateien aus zwei Verzeichnissen mit .htaccess schützen

Hallo zusammen,

ich habe eine Frage, undzwar habe ich folgende Struktur auf meinem Webspace:

/kunde/uebersicht.php
/kunde/anderedatei1.php
/kunde/anderedatei2.php

/kunde/katalog/kat1.pdf
/kunde/katalog/kat2.pdf
/kunde/katalog/kat3.pdf
/kunde/katalog/kat4.pdf

Undzwar möchte ich gerne die Dateien uebersicht.pdf sowie die kat1.pdf, kat2.pdf... per htaccess mit einem Passwortschutz versehen. anderedatei1.php und anderedatei2.php sollen NICHT von dem Schutz betroffen sein. Kann mir jemand sagen, wie ich das am besten hinbekomme?

Ich habe jetzt ewig gesucht und finde einfach keine Lösung, bin dankbar für jede Hilfe!

nadja125

  1. Hellihello

    ich habe eine Frage, undzwar habe ich folgende Struktur auf meinem Webspace:

    /kunde/uebersicht.php
    /kunde/anderedatei1.php
    /kunde/anderedatei2.php

    /kunde/katalog/kat1.pdf
    /kunde/katalog/kat2.pdf
    /kunde/katalog/kat3.pdf
    /kunde/katalog/kat4.pdf

    Undzwar möchte ich gerne die Dateien uebersicht.pdf

    Das ist doch .php. Meines Wissens kannst Du mit .htaccess den Passwortschutz nur für ein ganzes Verzeichnis einrichten. Pack die "uebersicht" in /katalog, oder bau in die uebersicht.php eine $_SESSION-Sperre ein.

    sowie die kat1.pdf, kat2.pdf... per htaccess mit einem Passwortschutz versehen. anderedatei1.php und anderedatei2.php sollen NICHT von dem Schutz betroffen sein. Kann mir jemand sagen, wie ich das am besten hinbekomme?

    Hier kanns Du doch .htaccess - Passwortschutz nutzen.

    Dank und Gruß,

    frankx

    --
    tryin to multitain  - Globus = Planet != Welt
    1. Hello,

      Meines Wissens kannst Du mit .htaccess den Passwortschutz nur für ein ganzes Verzeichnis einrichten.

      Nein, in der .htaccess-Datei können auch Vereinbarungen für einzelne Files oder Gruppen davon, sowie für einzelne Methoden getroffen werden. Die Einschränkungen sind auch teilweise kaskadierbar.

      http://httpd.apache.org/docs/2.2/mod/core.html#files
      und
      http://httpd.apache.org/docs/2.2/mod/core.html#filesmatch
      und
      http://httpd.apache.org/docs/2.2/mod/core.html#location
      und
      http://httpd.apache.org/docs/2.2/mod/core.html#locationmatch
      und
      http://httpd.apache.org/docs/2.2/mod/core.html#limit
      und
      http://httpd.apache.org/docs/2.2/mod/core.html#limitexcept

      Ein harzliches Glückauf

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Hellihello Tom,

        wie aber löse ich folgendes.

        In example.com/test findet sich:

        AuthUserFile /home/bla-blub/example.com/htdocs/.htpasswd
        AuthGroupFile /dev/null
        AuthName Intern
        AuthType Basic
        <Limit GET>
        require valid-user
        </Limit>

        Aber die Datei im Unterordner example.com/test/testunterornder/test.php will ich "freigeben", also von außen zugänglich machen - ohne passwort.

        Dank und Gruß,

        frankx

        --
        tryin to multitain  - Globus = Planet != Welt
        1. Hello,

          nur so als dumme Idee:

          <Limit GET>

          <FilesMatch  ...> http://httpd.apache.org/docs/2.2/mod/core.html#filesmatch
                 require valid-user
              </Files>

          </Limit>

          Ich habe es nicht ausprobiert und konnte aus dem Manual nicht erkennen, dass es _nicht_ funktionieren kann.

          http://httpd.apache.org/docs/2.2/mod/core.html#require

          Ein harzliches Glückauf

          Tom vom Berg

          --
          Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
          1. Hellihello

            <FilesMatch "!^test(.*).php">
            <Limit GET>
            require valid-user
            </Limit>
            </FilesMatch>

            Sollte eigentlich für alle Dateien, die _nicht_ mit test... beginnen einen Valid User requiren. Tut er aber nicht.

            <FilesMatch "!test(.*).php"> bringts auch nicht.

            Allein
            <FilesMatch "test(.*).php">
            bringt eine Passwortabfrage für test.php (und seinen Bruder test2.php).

            Mh...;

            Dank und Gruß,

            frankx

            --
            tryin to multitain  - Globus = Planet != Welt
            1. Hello,

              <FilesMatch "!^test(.*).php">

              Die Direktive <FilesMatch>  begrenzt wie die Direktive <Files> die enthaltenen Anweisungen auf Dateinamen. Sie akzeptiert jedoch reguläre Ausdrücke.

              Da scheint doch etwas nicht zu stimmen an Deinem regulären Ausdruck.

              Ein harzliches Glückauf

              Tom vom Berg

              --
              Nur selber lernen macht schlau
              http://bergpost.annerschbarrich.de
              1. Hellihello

                <FilesMatch "!^test(.*).php">

                Die Direktive <FilesMatch>  begrenzt wie die Direktive <Files> die enthaltenen Anweisungen auf Dateinamen. Sie akzeptiert jedoch reguläre Ausdrücke.

                Da scheint doch etwas nicht zu stimmen an Deinem regulären Ausdruck.

                (;-). Nehm ich das ! und das ^ wech, geht sie. Also muss der Ausdruck ja einigermaßen o.k. sein.

                Aber ich suche ja die Negation. Ich würde ja gerne eine Datei freigeben, alle anderen passwortgeschützt lassen.

                Dank und Gruß,

                frankx

                --
                tryin to multitain  - Globus = Planet != Welt
                1. Hello,

                  (;-). Nehm ich das ! und das ^ wech, geht sie. Also muss der Ausdruck ja einigermaßen o.k. sein.

                  Ein "Nicht" muss sich doch aber auf etwas beziehen. I.d.R. beziehen sich die Modifikatoren innerhalb des Patterns immer nur auf das (einzelne) nächste Zeichen.

                  Ein harzliches Glückauf

                  Tom vom Berg

                  --
                  Nur selber lernen macht schlau
                  http://bergpost.annerschbarrich.de
                  1. Hellihello

                    Hello,

                    (;-). Nehm ich das ! und das ^ wech, geht sie. Also muss der Ausdruck ja einigermaßen o.k. sein.

                    Ein "Nicht" muss sich doch aber auf etwas beziehen. I.d.R. beziehen sich die Modifikatoren innerhalb des Patterns immer nur auf das (einzelne) nächste Zeichen.

                    Ich hatte mal:

                    RewriteRule  !^quellen index_rewrite.php

                    irgendwann bentutzt. Das ging, alle Urls die _nicht_ mit "quellen" begannen, wurden rewritten. quellen/test.css zB. nicht.

                    Irgendwo steckt da eine Verständnislücke bei mir.

                    <FilesMatch "!^test2.*.php$">

                    funktioniert ja nicht. ! würde sich dann auf das ^ beziehen, also "nicht am Anfang" ???

                    <FilesMatch "!(test2.*.php)$">

                    also schön eingeklammert bringt auch nischt.

                    Dank und Gruß,

                    frankx

                    --
                    tryin to multitain  - Globus = Planet != Welt
                    1. Hallo,

                      <FilesMatch "!^test2.*.php$">

                      funktioniert ja nicht. ! würde sich dann auf das ^ beziehen, also "nicht am Anfang" ???

                      <FilesMatch "!(test2.*.php)$">

                      also schön eingeklammert bringt auch nischt.

                      an dieser Stelle hat es mich schon mehrfach unter den Nägeln gejuckt, einen bug report abzuliefern. Es wäre sehr schön, wenn zumindest in den Direktiven <.+Match> (ich darf das hoffentlich so verkürzt schreiben) volle PCRE-Unterstützung wäre. Jedoch gehe ich von einer Kettenreaktion im Quellcode aus, der daraufhin geändert werden will. Manche Wanze sitzt eben doch recht tief.

                      Gruß aus Berlin!
                      eddi

                      --
                      Die Welt ist Dein Spiegel und sagt Dir wie schön Du bist - in Berlin steht ein "Man, bist Du kaputt." dahinter.
                      1. Hellihello eddi,

                        <FilesMatch "!^test2.*.php$">

                        funktioniert ja nicht. ! würde sich dann auf das ^ beziehen, also "nicht am Anfang" ???

                        <FilesMatch "!(test2.*.php)$">

                        also schön eingeklammert bringt auch nischt.

                        an dieser Stelle hat es mich schon mehrfach unter den Nägeln gejuckt, einen bug report abzuliefern. Es wäre sehr schön, wenn zumindest in den Direktiven <.+Match> (ich darf das hoffentlich so verkürzt schreiben) volle PCRE-Unterstützung wäre. Jedoch gehe ich von einer Kettenreaktion im Quellcode aus, der daraufhin geändert werden will. Manche Wanze sitzt eben doch recht tief.

                        Und, wie geht denn das mit der Negation dann, weißt du das?

                        RewriteRule  !^quellen index_rewrite.php

                        funzt ja.

                        Binnenberlinischen Dank und Gruß,

                        frankx

                        --
                        tryin to multitain  - Globus = Planet != Welt
                        1. Re:

                          Und, wie geht denn das mit der Negation dann, weißt du das?

                          RewriteRule  !^quellen index_rewrite.php

                          innerhalb mod_rewrite sind die Direktiven auch negierbar. Aber leider nicht im core. Das ist so hinzunehmen. ;(

                          Gruß aus New Istanbul!
                          eddi

                          --
                          Türkei <> Schweiz 2-1
                          Hier war Silvesterstimmung auf den Straßen

                          1. Hellihello

                            Und, wie geht denn das mit der Negation dann, weißt du das?

                            RewriteRule  !^quellen index_rewrite.php

                            innerhalb mod_rewrite sind die Direktiven auch negierbar. Aber leider nicht im core. Das ist so hinzunehmen. ;(

                            Aha, wenn ich also für alle Dateien innerhalb eines Verzeichnisses "Require: valid user;" haben will, aber für eine nicht, kann ich das "Require" dann für die eine Datei wieder zurücknehmen?

                            Dank und Gruß aus dem völlig ruhigen Südwesten (wäre dann sozusagen im Mittelmeer),

                            frankx

                            --
                            tryin to multitain  - Globus = Planet != Welt
                            1. Hi,

                              Aha, wenn ich also für alle Dateien innerhalb eines Verzeichnisses "Require: valid user;" haben will, aber für eine nicht, kann ich das "Require" dann für die eine Datei wieder zurücknehmen?

                              Ja, da kommt dann <FILES> zusammen mit SATISFY wieder ins Spiel.

                              MfG ChrisB

                              --
                              "The Internet: Technological marvel of marvels - but if you don't know *what* you're lookin' for on the Internet, it is nothing but a time-sucking vortex from hell."
                              1. Hallo Frank,

                                Aha, wenn ich also für alle Dateien innerhalb eines Verzeichnisses "Require: valid user;" haben will, aber für eine nicht, kann ich das "Require" dann für die eine Datei wieder zurücknehmen?

                                Ja, da kommt dann <FILES> zusammen mit SATISFY wieder ins Spiel.

                                dazu noch ein Beispiel für den Apachen 2.2.*:

                                [DocRoot]
                                  |
                                  -test/       |       |-index.html       |       |-offen.html       |       |-.htaccess       |       -.htpasswd

                                Inhalt der .htaccess:

                                  
                                AuthType           Digest  
                                AuthDigestProvider file  
                                AuthName           "private area"  
                                AuthUserFile       [DocRoot]/test/.htpasswd  
                                Require            valid-user  
                                <Files offen.html>  
                                        Order   Allow,Deny  
                                        Allow   from all  
                                        Satisfy any  
                                </Files>  
                                
                                

                                Gruß aus Berlin!
                                eddi

                                --
                                Die Welt ist Dein Spiegel und sagt Dir wie schön Du bist - in Berlin steht ein "Man, bist Du kaputt." dahinter.
                                1. Hellihello eddi,

                                  Hallo Frank,

                                  frankx aka Robert oder umgekehrt. Mein Pseudonym hat nischt mit meinem Namen ssu tun (;-).

                                    
                                    
                                  AuthType           Digest  
                                  #AuthDigestProvider file  
                                  AuthName           "private area"  
                                  AuthUserFile /bla/bla/example.com/htdocs/.htpasswd  
                                  AuthGroupFile /dev/null  
                                  Require            valid-user  
                                  <Files test.php>  
                                          Order   Allow,Deny  
                                          Allow   from all  
                                          Satisfy any  
                                  </Files>  
                                    
                                  
                                  

                                  Bringt einen Internal Server Error bei allen, außer bei test.php. Kommentiere ich AuthDigestProvider aus, dann gibts den 500er bei allen Anfragen.

                                  Jruß,

                                  frankx

                                  --
                                  tryin to multitain  - Globus = Planet != Welt
                                  1. Hellihello

                                    AuthType           Basic

                                    funzt dann. Digest aber nicht. Funzen heißt: lässt die test.php durch, die anderen per Passwortabfrage.

                                    Dank und Gruß,

                                    Robert aka
                                    frankx

                                    --
                                    tryin to multitain  - Globus = Planet != Welt
                                    1. Re:

                                      funzt dann. Digest aber nicht. Funzen heißt: lässt die test.php durch, die anderen per Passwortabfrage.

                                      Na, nee na, mod_auth_digest darf's schon sein. Alle Benötigten Module für die Konfiguration auf einen Blick:

                                      LoadModule auth_digest_module  modules/mod_auth_digest.so
                                      LoadModule authn_file_module   modules/mod_authn_file.so
                                      LoadModule authz_host_module   modules/mod_authz_host.so

                                      Robert

                                      Ei, angenehm :)

                                      Gruß aus Berlin!
                                      eddi

                                      1. Hellihello eddi,

                                        funzt dann. Digest aber nicht. Funzen heißt: lässt die test.php durch, die anderen per Passwortabfrage.

                                        Na, nee na, mod_auth_digest darf's schon sein. Alle Benötigten Module für die Konfiguration auf einen Blick:

                                        LoadModule auth_digest_module  modules/mod_auth_digest.so
                                        LoadModule authn_file_module   modules/mod_authn_file.so
                                        LoadModule authz_host_module   modules/mod_authz_host.so

                                        Ich vergaß wohl zu sagen, dass sich diese Sache auf einem strato-Miet-Space befindet, kein (v)Server mit root-Zugriff.

                                        Dank und Gruß,

                                        Robert aka

                                        frankx

                                        --
                                        tryin to multitain  - Globus = Planet != Welt
                                        1. strato?

                                          Du hast mein Beileit.

                                2. Hellihello

                                  <Files offen.html>
                                          Order   Allow,Deny
                                          Allow   from all
                                          Satisfy any
                                  </Files>

                                  funktioniert übrigens auch, wenn "offen.html" in [DocRoot]/test/unterordner liegt.

                                  Und zwar ohne relative Pfadangabe, sondern nur mit dem Dateinamen. Bezieht sich das "<Files>" auf alle files, mit selbigem Namen - egal in welchem Ornder?

                                  Dank und Gruß,

                                  frankx

                                  --
                                  tryin to multitain  - Globus = Planet != Welt
                                  1. Re:

                                    <Files offen.html>
                                            Order   Allow,Deny
                                            Allow   from all
                                            Satisfy any
                                    </Files>

                                    funktioniert übrigens auch, wenn "offen.html" in [DocRoot]/test/unterordner liegt.

                                    Bezieht sich das "<Files>" auf alle files, mit selbigem Namen - egal in welchem Ornder?

                                    Ja. Im _jeweiligen_ Unterverzeichnis müsste also eine neue Konfiguration überschreibend wirken, wenn "offen.html" in den Unterverzeichnissen nicht abrufbar sein sollte. Es ist also ein sehr gutes Beispiel dafür, dass einer fehlerhaften Struktur als Grundlage eines Projekts mit Modifizierung der Konfiguration _alleine_ nur schwerlich beizukommen ist.

                                    Gruß aus Berlin!
                                    eddi

                                    1. Hellihello

                                      Bezieht sich das "<Files>" auf alle files, mit selbigem Namen - egal in welchem Ornder?

                                      Ja. Im _jeweiligen_ Unterverzeichnis müsste also eine neue Konfiguration überschreibend wirken, wenn "offen.html" in den Unterverzeichnissen nicht abrufbar sein sollte. Es ist also ein sehr gutes Beispiel dafür, dass einer fehlerhaften Struktur als Grundlage eines Projekts mit Modifizierung der Konfiguration _alleine_ nur schwerlich beizukommen ist.

                                      Na, die "offen.html" liegt eins tiefer, und ist auch mutterseelenallein mit ihrem Namen.

                                      Ist übrigens keine "Grundlage" sondern ein Einzelfall, also war eine Sondereinrichtung der einen Datei für eine Person, und jetzt dachte ich, der Rest des Verzeichnisses sollte eigentlich geschützt werden.

                                      Bisher hatte ich nämlich gemeint, dass URLs, wenn sei nicht bekannt gemacht würden, ja erstmal auch unbekannt wären. Aber dann stellte ich letzlich fest, dass ich durch meinen PageRank-Anzeiger die URLs bei Google angebe. Und Google protokolliert fleißig mit. In dem Sinne keine sensiblen Daten, aber auch keine öffentlichen. Nun, die Erfahrung soll natürlich bei Grundlagenplanungen mit einfließen. Da aber bietet sich ja von vornherein eine robustere Struktur zur Trennung von System/Admin und Public/User an.

                                      Dank und Gruß,

                                      frankx

                                      --
                                      tryin to multitain  - Globus = Planet != Welt
                                      1. Re:

                                        Da aber bietet sich ja von vornherein eine robustere Struktur zur Trennung von System/Admin und Public/User an.

                                        Mag man ja über die Trennung von Publikation und dessen Nutzer noch reden können, halte ich jedoch eine Trennung des Administrators vom System für unstreitbar schadhaft. ^,-

                                        Gruß aus Berlin!
                                        eddi

                                        --
                                        Der Verweis auf die Grundlagen Deines Handelns, ist das Joch zur Freiheit.
                                        Aber so gilt: Allen Leuten Recht getan, ist keine Kunst, weil's jeder kann.
                            2. Dank und Gruß aus dem völlig ruhigen Südwesten (wäre dann sozusagen im Mittelmeer),

                              Mann, hat unser Bärchen doch große Tatzen. ;)

                              --
                              *fieb*
  2. Hi,

    Undzwar möchte ich gerne die Dateien uebersicht.pdf sowie die kat1.pdf, kat2.pdf... per htaccess mit einem Passwortschutz versehen. anderedatei1.php und anderedatei2.php sollen NICHT von dem Schutz betroffen sein. Kann mir jemand sagen, wie ich das am besten hinbekomme?

    Beschaeftige dich mit der <Files>-Direktive.

    MfG ChrisB

    --
    "The Internet: Technological marvel of marvels - but if you don't know *what* you're lookin' for on the Internet, it is nothing but a time-sucking vortex from hell."
    1. Hallo,

      Undzwar möchte ich gerne die Dateien uebersicht.pdf sowie die kat1.pdf, kat2.pdf... per htaccess mit einem Passwortschutz versehen. anderedatei1.php und anderedatei2.php sollen NICHT von dem Schutz betroffen sein. Kann mir jemand sagen, wie ich das am besten hinbekomme?

      Beschaeftige dich mit der <Files>-Direktive.

      bitte additional ebenso mit Order beschäftigen!

      Gruß aus Berlin!
      eddi

      --
      Diese Nachricht ist made in Rixdorf und wurde mittels 100% recycelter Elektronen verfasst.
      Und der Strom? Äh - kommt aus der Steckdose! :)