AllesMeins: Direkter Aufruf von Dateien verhindern

Hiho,

ich arbeite bei meiner Seite mit PHP. Dort wird eine index-Dateiaufgerufen, die nötige Funktionen, das Design und das Menu bereit stellt. In dieser Datei werden dann die Scripte für die einzelnen Unterrubriken includet.
Nun ist das Problem das jemand, der die Adresse rät auch direkt die includeten Dateien aufrufen könnte. Die meisten werden nicht funktionieren, weil einfach die Funktionen aus der index fehlen. Aber wer weiss vielleicht findet sich da doch ein Loch.
Deshalb: Kann man irgendwie den Direkt-zugriff per Browser auf einen Ordner sperren oder umleiten auf die index-Datei (z.b. mit htaccess)? PHP muss aber wieterhin die Dateien lesen und schreiben können.

Grüsse

Marc

  1. hi,

    Deshalb: Kann man irgendwie den Direkt-zugriff per Browser auf einen Ordner sperren oder umleiten auf die index-Datei (z.b. mit htaccess)? PHP muss aber wieterhin die Dateien lesen und schreiben können.

    z.b. per HTTP AUTH dateien mit passwordschutz versehen, per allow/deny ganzes verzeichnis über HTTP unzugänglich machen, oderhalb des web roots ablegen ...

    gruss,
    wahsaga

    1. Hiho,

      kann ich da auch irgendwie statt dem Auth gleich wieder auf die index-Datei zurück leiten, wenn ja wie (mir reicht auch ein Stichwort nachd em ich goggeln kann)?
      Und kann man auch eine Liste von Unterverzeichnissen angeben, für die das nicht gelten soll? Am praktischsten wäre etwas in der Art: Wenn der Nutzer auf eine Datei zugreifen will, die nicht im Ordner 'images','bla' und 'blabla' liegt dann leite ihn zurück zur index.php.

      Grüsse

      Marc

      p.s.: Ausserhalb des Web-Rootes ist etwas unpraktisch weil es hiesse in  ein paar hundert Dateien die Pfade umzuschreiben - eine Arbeit die ich gerne vermeiden würde :)

      1. use Mosche;

        kann ich da auch irgendwie statt dem Auth gleich wieder auf die index-Datei zurück leiten, wenn ja wie (mir reicht auch ein Stichwort nachd em ich goggeln kann)?

        Stichwort ist mod_rewrite.

        use Tschoe qw(Matti);

        --
          Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
        1. Hiho,

          nein ist es leider nicht. Denn mod_rewrite macht keine Weiterleitungen (soweit ich weiss) sondern arbeitet nur intern. Sprich es ändern sich z.b. alle relativen Pfade. Das kann man zwar mit nem <base href umgehen aber mir wäre eine richtige Weiterleitung lieber...

          Grüsse

          1. hi,

            Denn mod_rewrite macht keine Weiterleitungen (soweit ich weiss) sondern arbeitet nur intern.

            doch, genau dafür ist das optionale flag [R] ja gedacht.

            gruss,
            wahsaga

          2. Hi,

            nein ist es leider nicht. Denn mod_rewrite macht keine Weiterleitungen (soweit ich weiss) sondern arbeitet nur intern. Sprich es ändern sich z.b. alle relativen Pfade. Das kann man zwar mit nem <base href umgehen aber mir wäre eine richtige Weiterleitung lieber...

            du kannst damit dem Apache sagen, wenn jemand die Datei foo.php aufruft, soll er die index.php ausliefern. Mit einem Redirect ginge es auch - in .htaccess:

            RedirectMatch 301 (.*).inc.php$ http://deinserver/index.php

            Status 301 behauptet damit - aber das weißt Du ja sicher ;-]]] - dass die Ressource permanent umgezogen ist.

            viele Grüße
              Achim Schrepfer

            --
            http://reskit.speedesign.de/ - PHP-Bibliothek zum automatischen Erzeugen von HTML-Tabellen, -Formularen und -Baummenüs anhand von MySQL-Tabellen
            Selfcode: sh:) fo:| ch:| rl:° br:> n4:{ ie:% mo:} va:| de:< zu:| fl:( ss:) ls:& js:|
            1. Hiho,

              du kannst damit dem Apache sagen, wenn jemand die Datei foo.php aufruft, soll er die index.php ausliefern. Mit einem Redirect ginge es auch - in .htaccess:

              Gut, soweit habe ich es jetzt verstanden. Aber mir fehlt immer noch die  "umgekehrte" Funktion. Ich kann zwar sagen bei diesem und diesem und diesem Ordner leite um, aber ich will eigentlich nicht jedes mal die htaccess anpassen müssen, wenn ich nen neuen Ordner anlege (was öfters vorkommt). Deswegen würde ich gerne andersrum vorgehen. Also "wenn Ordner nicht 'images','bla','blabla' ist dann leite um. Das einzige was mir bisher dazu einfällt wäre eine Liste mit Regeln die nichts machen (bzw. halt den Request ganz normal auf die gesuchte Ressource weiterleiten) für jeden freien Ordner und danach ein [S] um zu verhindern das die letzte Regel, die alles auf index.php zurück reicht zur Anwendung kommt. Aber das muss doch noch eleganter und besser gehen, oder?

              Status 301 behauptet damit - aber das weißt Du ja sicher ;-]]]

              Nicht Auswending. Aber ich wüsste wo ich nachschauen kann :)

              Grüsse

              Marc

              1. hi,

                Gut, soweit habe ich es jetzt verstanden. Aber mir fehlt immer noch die  "umgekehrte" Funktion. [...]
                Deswegen würde ich gerne andersrum vorgehen. Also "wenn Ordner nicht 'images','bla','blabla' ist dann leite um.

                RedeirectMatch arbeitet mit regulären ausdrücken, und mit diesen kannst du sehr gut auch eine bedingung erstellen, die der von dir geforderten "verneinung" entspricht.

                also beschäftige dich mit regulären ausdrücken.

                gruss,
                wahsaga

                1. Hi,

                  die Frage ist halt, ob man nicht einen Zweig einrichtet, der generell nicht per Web erreichbar ist und alle Unterverzeichnisse automatisch vor Webzugriff schützt. Es kommt natürlich drauf an, ob die bestehende Struktur das erlaubt.

                  viele Grüße
                    Achim Schrepfer

                  --
                  http://reskit.speedesign.de/ - PHP-Bibliothek zum automatischen Erzeugen von HTML-Tabellen, -Formularen und -Baummenüs anhand von MySQL-Tabellen
                  Selfcode: sh:) fo:| ch:| rl:° br:> n4:{ ie:% mo:} va:| de:< zu:| fl:( ss:) ls:& js:|
                  1. Hiho,

                    im Nachhinein betrachtet wäre das sicher klüger gewesen, das System so aufzubauen. Aber leider ist es ein gewachsenes System und als ich damit angefangen habe hatte ich weder die nötige weitsicht noch überhaupt auch nur geahnt, das das System irgendwann mal exklusive Bereiche enthalten würde, die ich schützen muss. Denn bei ner einfachen Template-Inhalt Struktur ist es ja nun wirklich nicht wichtig.

                    Grüsse

                    Marc

  2. Hiho,

    Deshalb: Kann man irgendwie den Direkt-zugriff per Browser auf einen Ordner sperren oder umleiten auf die index-Datei (z.b. mit htaccess)? PHP muss aber wieterhin die Dateien lesen und schreiben können.

    Jo, so wie's aussieht liegen deine Dateien im Webtree - und können so per http requested werden.

    Workaround:
    1 .htaccess
    oder
    2 Dateien ausserhalb des Webtree ablegen

    Dein Script greift ja per Filesystem auf die Dateien, juckt sich also nicht an einer .htaccess.

    Gruss, Rolf

    --
    SELFforum - Das Tor zur Welt!
    Theoretiker: Wie kommt das Kupfer in die Leitung?
    Praktiker: Wie kommt der Strom in die Leitung?
  3. Moin Marc,

    Deshalb: Kann man irgendwie den Direkt-zugriff per Browser auf einen Ordner sperren oder umleiten auf die index-Datei (z.b. mit htaccess)? PHP muss aber wieterhin die Dateien lesen und schreiben können.

    eine Möglichkeit ist, die Dateien ausserhalb des Webrootes abzulegen. Dann sind sie nicht mehr per URL erreichbar.

    Gruß
    Mike

    --
    Murphy: "Wenn etwas schiefgehen kann, dann wird es auch schiefgehen."
  4. Hallo AllesMeins!

    Deshalb: Kann man irgendwie den Direkt-zugriff per Browser auf einen Ordner sperren oder umleiten auf die index-Datei (z.b. mit htaccess)? PHP muss aber wieterhin die Dateien lesen und schreiben können.

    Man kann mit .htaccess Verzeichnisse vor dem Zugriff über den Webserver schützen.
    (grmpf, blöde Auslastung, jetzt muß ich den Text doch nochmal schreiben anstatt ihn nur zu kopieren)
    Bezüglich .htaccess kannst du Dir mal folgende 2 Artikel anschauen:
      * http://aktuell.de.selfhtml.org/artikel/server/htaccess-faq/index.htm
      * http://aktuell.de.selfhtml.org/artikel/server/htaccess/index.htm

    Du kannst die Dateien aber auch einfach außerhalb des Webroots ablegen.
    Die Rechte für diesen Ordner mußt Du dann natürlich so setzen, daß PHP trotzdem noch darauf zugreifen kann.

    MfG
    Götz

    --
    Losung für Montag, 5. April 2004
    Der Herr ist mein Fels und meine Burg und mein Erretter. (2. Samuel 22,2)
    Niemand kann in das Haus eines Starken eindringen. (Markus 3,27)
    (http://www.losungen.de/heute.php3)
  5. Hi,

    wie weiß deine index.php eigentlich, welche Datei zu includen ist? Wenn Du sowas hier machst: http://meinserver/index.php?inc=diesedatei.php dann ist das sehr gefährlich und anfällig für Cross-Site-Scripting. Besser ist es ein Array in der index.php vorzuhalten, das den Include-Files einen eindeutigen Namen zuweist:

    $files = array (
     'bla' => 'foo.php',
     'zap' => 'bar.php'
    );

    include $files[$_GET['inc']];

    Ok, soviel dazu. Den Zugriff kannst Du auch einschränken indem Du in der index.php eine globale Variable einführst und in den include-Files testest, ob die Variable einen bzw. den richtigen Wert hat. Ansonsten lässt Du die include-files einfach sterben. Aber auch die anderen angesprochenen Möglichkeiten mit .htaccess bzw. Ablage ausserhalb der Webroot sind wirksame Mittel.

    viele Grüße
      Achim Schrepfer

    --
    http://reskit.speedesign.de/ - PHP-Bibliothek zum automatischen Erzeugen von HTML-Tabellen, -Formularen und -Baummenüs anhand von MySQL-Tabellen
    Selfcode: sh:) fo:| ch:| rl:° br:> n4:{ ie:% mo:} va:| de:< zu:| fl:( ss:) ls:& js:|
    1. Hiho,

      hmm, du liest heise-Forum? :)
      Abe rich kann dich beruhigen meine PHP Künste sind schon etwas weiter... Das ändert abe rnichts daran das man trotzdem noch direkt auf die entsprechenden dateien zugreifen kann, was ich ja gerade versuche zu vermeiden...

      Grüsse

      1. Hello,

        Abe rich kann dich beruhigen meine PHP Künste sind schon etwas weiter...

        Was ich bezweifele.

        Das ändert abe rnichts daran das man trotzdem noch direkt auf die entsprechenden dateien zugreifen kann,

        eben deshalb.

        Wo liegen denn Deine PHP-Files?
        In der DOC-Root muss doch nur die Files liegen, die mit direktem Request erreichbar sein sollen, also die index.*** und z.B. logo.gif und impressum.html

        Alle andeen Files liegen entweder außerhalb der Doc-Root oder in einem mit .htaccess gesperrten Verzeichnis. Das PHP-Modul interessiert das .htaccess nicht, die direkten http-requests bleiben aber ausgesperrt oder umgeleitet.

        Liebe Grüße aus http://www.braunschweig.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        1. Hiho,

          Abe rich kann dich beruhigen meine PHP Künste sind schon etwas weiter...

          Was ich bezweifele.

          Naja, musst es mir ja nicht glauben. Aber ich weiss das mein System nicht anfällig ist für script.php?datei=http://irgendwas.de/boeses_script.php. In so fern sind meine Künste weiter. mal abgesehen davon: wie kommt ihr alle auf die Idee ich hätte keine ahnung von PHP nur weil ich die htaccess-Befehle nicht kenne? Das eine hat mit dem anderen ja nun nicht wirklich viel zu tun, oder? Hab halt htaccess bisher noch nicht gebraucht...

          Alle andeen Files liegen entweder außerhalb der Doc-Root oder in einem mit .htaccess gesperrten Verzeichnis.

          Die Dateien liegen in mereren Unterverzeichnissen. In einem Verzeichniss wird bei der Menge von Dateien etwas unübersichtlich.
          Naja und genau deshalb habe ich ja gefragt wie man Verzeichnisse mit htaccess sperrt...

          Grüsse

          Marc

          1. Hi,

            wie kommt ihr alle auf die Idee ich hätte keine ahnung von PHP nur weil ich die htaccess-Befehle nicht kenne? Das eine hat mit dem anderen ja nun nicht wirklich viel zu tun, oder? Hab halt htaccess bisher noch nicht gebraucht...

            sorry aber da kann ich jetzt nicht widerstehen: ich bin der Meinung, dass man freilich PHP beherrschen kann, ohne auch nur überhaupt einen Funken Ahnung von der Maschinerie außen rum zu haben - kein Thema. Wenn man aber Webapplikationen mit PHP erstellen will, sollte man mit grundlegenden Mechanismen vertraut sein - insbesondere mit HTTP und Serverkonfiguration.

            Naja, egal, Fakt ist, dass sich Dein "meine PHP Künste"-blabla ganz schön aufgeblasen gelesen hat - sowas verleitet mich immer zu Sarkasmus ;-)

            viele Grüße
              Achim Schrepfer

            --
            http://reskit.speedesign.de/ - PHP-Bibliothek zum automatischen Erzeugen von HTML-Tabellen, -Formularen und -Baummenüs anhand von MySQL-Tabellen
            Selfcode: sh:) fo:| ch:| rl:° br:> n4:{ ie:% mo:} va:| de:< zu:| fl:( ss:) ls:& js:|
      2. Hi,

        hmm, du liest heise-Forum? :)

        nope...

        Abe rich kann dich beruhigen meine PHP Künste sind schon etwas weiter...

        Oha! Du bist also ein Guter!?

        Das ändert abe rnichts daran das man trotzdem noch direkt auf die entsprechenden dateien zugreifen kann, was ich ja gerade versuche zu vermeiden...

        Ich dachte mir halt, wenn jemand schon nicht weiß, wie er Dateien auf einem Webserver vor dem Zugriff schützt, dann weise ich schnell noch auf die Gefahr von CSS-Attacken hin - war nur gut gemeint...

        viele Grüße
          Achim Schrepfer

        --
        http://reskit.speedesign.de/ - PHP-Bibliothek zum automatischen Erzeugen von HTML-Tabellen, -Formularen und -Baummenüs anhand von MySQL-Tabellen
        Selfcode: sh:) fo:| ch:| rl:° br:> n4:{ ie:% mo:} va:| de:< zu:| fl:( ss:) ls:& js:|
        1. Hiho,

          hmm, du liest heise-Forum? :)

          nope...

          Naja, da gab es vor 2 Tagen genau diese Diskussion mit sehr ähnlichen beispielen :) Hat mich etwas daran erinnert...

          Oha! Du bist also ein Guter!?

          Ich wills hoffen :)

          Ich dachte mir halt, wenn jemand schon nicht weiß, wie er Dateien auf einem Webserver vor dem Zugriff schützt, dann weise ich schnell noch auf die Gefahr von CSS-Attacken hin - war nur gut gemeint...

          Ist ja auch nichts verkehrtes dran. Hab den Hinweis zur Kentniss genommen und fest gestellt das meine Scripte auf diese Weise nicht angreifbar sind (wobei das vor allem daran liegt das ich es immer ausgesprochen hässlich fand wenn irgend eine Adresse in der URL auftaucht. Und weil ich da etwas Kosmetik betrieben habe, habe ich damals als ich angefangen habe ganz unbewust diese Klippe umschifft)

          Grüsse

          Marc

  6. Sup!

    Lang lebe die Grammatik.

    *scnr*

    Gruesse,

    Bio

    --
    Faster, Harder, Scooter!
    1. Ich kann einfach nicht verstehen wie ich Leute so freuen können wenn sie einen falschen Buchstaben entdecken. Habt ihr sonst keinen Spass im Leben?

      1. Sup!

        Ich kann einfach nicht verstehen wie ich Leute so freuen können wenn sie einen falschen Buchstaben entdecken. Habt ihr sonst keinen Spass im Leben?

        Also erstmal habe ich sonst keinen Spass im Leben, ganz richtig erkannt, und zweitens geht es hier nicht nur um einen *Buchstaben*, nein, dieser Syntaxfehler zieht einen semantischen Fehler nach sich, es geht also um einen besonders wichtigen und signifikanten Buchstaben, einen Buchstaben an einer Stelle, wo keine Fehler toleriert werden können, um einen Grammatikfehler, um die deutsche Sprache, um den Zusammenhalt der Nation, um das Vaterland, um die Zukunft Europas, und um die Kultur des Abendlandes! Wehret den Anfängen!

        ;-)

        Gruesse,

        Bio

        --
        Faster, Harder, Scooter!
        1. Hiho,

          freut mich das du das locker siehst. Ich hätte ehrlich gesagt damit gerechnet das du jetzt eine ganze Reihe von Provvokationen usw. los lässt. Immer wieder gut zu sehen das es auch noch Menschen mit Humor gibt...

          Grüsse

          1. Sup!

            freut mich das du das locker siehst. Ich hätte ehrlich gesagt damit gerechnet das du jetzt eine ganze Reihe von Provvokationen usw. los lässt. Immer wieder gut zu sehen das es auch noch Menschen mit Humor gibt...

            Tja, man muss zu ueberraschen wissen.

            Gruesse,

            Bio

            --
            Faster, Harder, Scooter!
  7. use Mosche;

    Deshalb: Kann man irgendwie den Direkt-zugriff per Browser auf einen Ordner sperren oder umleiten auf die index-Datei (z.b. mit htaccess)? PHP muss aber wieterhin die Dateien lesen und schreiben können.

    Noch ein paar Tips hier: [pref:t=77475&m=447959]

    use Tschoe qw(Matti);

    --
      Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
    1. Hiho,

      leider nicht:

      Fehler

      Die von Ihnen angeforderte Nachricht konnte nicht gefunden werden.

      Marc

      1. use Mosche;

        leider nicht:
        Die von Ihnen angeforderte Nachricht konnte nicht gefunden werden.

        Ist entweder im Archiv oder in dessen Vorhölle.

        use Tschoe qw(Matti);

        --
          Anyone who quotes me in their sig is an idiot. -- Rusty Russell.