Helmut: htaccess - redirect zu 404

Hallo!

Ich schreibe gerade eine Internetapplikation die config.ini-Dateien in mehreren Unterverzeichnissen benötigt. Aus mehreren Gründen muss es sich dabei um .ini-Dateien handeln. Und sie müssen auch in diesen Verzeichnissen bleiben. Jetzt ist es aber so dass die Inhalte dieser Konfigurationsdateien vor externem Zugriff geschützt werden müssen. In den selben Verzeichnissen in denen die config-Dateien sind, befinden sich aber auch Dateien auf die sehr wohl zugegriffen werden darf.

kurz:
Ich möchte alle Anfragen auf .ini-Dateien mit dem Status Code 404 beantworten. Da die Konfigurationsdateien niemanden etwas angehen braucht auch niemand wissen dass diese existieren bzw. wo diese existieren (_dass_ sie existieren hab ich ja soeben verraten ;) ).

Ich hab es bereits mit RedirectMatch versucht und hab es nur geschafft dass weitergeleitet wird (ich mein klar .. redirect eben) .. ich hab es nicht geschafft dass einfach der status code 404 zurückgegeben wird.

Was ich übrigens _nicht_ will ist eine eigene Fehlerseite erstellen und auf diese weiterleiten. Ich will wirklich nur den Status Code 404 zurückgeben.

Kann mir da jemand helfen?

besten Dank schon mal,
Helmut

  1. echo $begrüßung;

    Ich möchte alle Anfragen auf .ini-Dateien mit dem Status Code 404 beantworten.
    Ich hab es bereits mit RedirectMatch versucht und hab es nur geschafft dass weitergeleitet wird (ich mein klar .. redirect eben) .. ich hab es nicht geschafft dass einfach der status code 404 zurückgegeben wird.

    Ein Redirect ist auch der falsche Weg, denn damit bekommt der Browser auf die ursprüngliche Anfrage einen 30x-Code zurück. Dann begibt er sich auf die Suche nach dem Ersatz und bekommt dafür ein 404.

    Da die Konfigurationsdateien niemanden etwas angehen braucht auch niemand wissen dass diese existieren bzw. wo diese existieren (_dass_ sie existieren hab ich ja soeben verraten ;) ).

    Kannst du diese Dateien nicht einfach außerhalb des Documentroots ablegen? Dann glänzt sofort dein Problem durch Nichtvorhandensein. Bei Providern mit mehreren Domains pro Paket muss es möglich sein, diese auf (unterschiedliche) Unterverzeichnisse seines Kundenverzeichnisses weisen zu lassen. Mach das mit all deinen Domains und du kannst "daneben" weitere Verzeichnisse anlegen, die keinen Webzugriff haben.

    Was ich übrigens _nicht_ will ist eine eigene Fehlerseite erstellen und auf diese weiterleiten. Ich will wirklich nur den Status Code 404 zurückgeben.

    Solch eine Fehlerseite liefert der Webserver direkt anstelle des gefragten Dokuments aus. Es findet dabei keine Weiterleitung oder dergleichen statt.

    echo "$verabschiedung $name";

    1. besten Dank mal für deine Antwort

      Kannst du diese Dateien nicht einfach außerhalb des Documentroots ablegen?

      An diese grundsätzliche Möglichkeit hab ich zwar schon gedacht, kann ich aber in diesem konkreten Fall leider nicht voraussetzen dass das möglich ist. Das Tool muss möglichst einfach und möglichst überall "installiert" werden können.

      Solch eine Fehlerseite liefert der Webserver direkt anstelle des gefragten Dokuments aus. Es findet dabei keine Weiterleitung oder dergleichen statt.

      und wie mach ich das, dass er mir diese Fehlerseite statt der config.ini ausspuckt?

      1. echo $begrüßung;

        Das Tool muss möglichst einfach und möglichst überall "installiert" werden können.

        [...]

        und wie mach ich das, dass er mir diese Fehlerseite statt der config.ini ausspuckt?

        Im einfachsten Fall, und in deinem Szenario kann man ja auch nicht unbedingt ein mod_rewrite voraussetzen, solltest du diese Konfigurationsdateien in einem eigenen Verzeichnis ablegen, auch wenn dieses nicht außerhalb des Documentsroot liegen kann. In dieses kommt eine .htaccess mit einem

        deny from all

        Das 403 Forbidden ist der Tod, den du sterben musst, wenn du keine Verzeichnisse außerhalb des Documentroots zur Verfügung hast. Du solltest übrigens die Empfehlung eines "außenliegenden" Verzeichnisse mit in die Installationsanleitung aufnehmen.

        echo "$verabschiedung $name";

        1. Im einfachsten Fall, und in deinem Szenario kann man ja auch nicht unbedingt ein mod_rewrite voraussetzen

          ja, ich weiß .. um Minimalanforderungen komm ich leider nicht herum .. sonst dürfte ich ja nichtmal mit php rechnen. Oder mit sonst irgendwas. Irgendwo muss ich dann doch Grenzen ziehen.

          Das 403 Forbidden ist der Tod, den du sterben musst, wenn du keine Verzeichnisse außerhalb des Documentroots zur Verfügung hast. Du solltest übrigens die Empfehlung eines "außenliegenden" Verzeichnisse mit in die Installationsanleitung aufnehmen.

          Danke das ist eine gute Idee, das kann ich machen.

          hab es übrigens jetzt doch noch geschaft .. und es ist doch ein Redirect ;)

          RedirectMatch 404 .ini$

          besten Dank für deine Hilfe und Gruß,
          Helmut

  2. Hi,

    Ich möchte alle Anfragen auf .ini-Dateien mit dem Status Code 404 beantworten. Da die Konfigurationsdateien niemanden etwas angehen braucht auch niemand wissen dass diese existieren bzw. wo diese existieren

    "Security by obscurity" hat noch nie etwas getaugt.

    Zumal es in deinem Folgeposting so klingt, als ob du dein Script irgendwo veroeffentlichen willst o.ae. - dann weiss also sowieso jeder, der es sich herunterlaedt und anschaut, dass es diese Dateien gibt und wo.

    Mach dir das Leben nicht unnoetig schwer - und antworte auf HTTP-Anfragen nach den Dateien einfach mit einem 403 Forbidden.

    Ganz simpel bekommst du das hin, indem du ihren Namen dahingehend aenderst, dass er mit einem Punkt beginnt - wird vom Apache in Defaultkonfiguration dann nicht ausgeliefert, sondern eben mit einem 403 beantwortet. (.ht* sollte noch gaengiger sein.)

    Falls du am Namen config.ini festhalten willst - dann behelfe dir halt mit einer .htaccess unter Nutzung der <Files>-Direktive und DENY.

    MfG ChrisB

    1. "Security by obscurity" hat noch nie etwas getaugt.

      Stellst du deinen Safe auch ans Fenster? ;)

      Falls du am Namen config.ini festhalten willst - dann behelfe dir halt mit einer .htaccess unter Nutzung der <Files>-Direktive und DENY.

      Vielen Dank, das funktioniert sehr gut.

      hm .. hätte trotzdem lieber eine 404 statt einer 403. Der Schutz würde dadurch ja nicht schlechter werden. Gibts da eine Möglichkeit?

      besten Dank

      1. Hi,

        hm .. hätte trotzdem lieber eine 404 statt einer 403. Der Schutz würde dadurch ja nicht schlechter werden. Gibts da eine Möglichkeit?

        Auch wenn ich das nach wie vor fuer bloedsinnig halte - Redirect erlaubt auch die Angabe eines Status Codes.

        MfG ChrisB

        1. Auch wenn ich das nach wie vor fuer bloedsinnig halte - Redirect erlaubt auch die Angabe eines Status Codes.

          vielen herzlichen dank dass du mir trotzdem weitergeholfen hast. Hab zwar jetzt wieder einiges durchprobieren müssen bis ich dahintergekommen bin wie er es will, aber jetzt funktioniert es genau so wie es soll.

          RedirectMatch 404 .ini$

          aller besten Dank nochmal und Gruß,
          Helmut