Kalle: .htaccess-methode Sicher?

Hallo,

ja ich weiß das Thema gabs schon x mal, aber ich habe natürlich eine Spezielle frage:

Meine Homepage um die es sich handelt ist so aufgebaut, dass der Kunde seinen Inhalt selber ändern kann. Alle Dateien die dafür notwendig sind befinden sich im selben Verzeichnis wie die Homepage selbst. jedoch alle mit der endung .php damit nichts im Klartext vorliegt.
Um in den Modus zu gelangen Content ändern zu können ist eine Authentifizierung notwendig. Dazu muss man einfach das Verzeichnis
config/ aufrufen. Darin enthalten sind

.htaccess
.htpasswd
index.php

ist die Anmeldung erfolgreich wird man über die index.php mittels

<? HEADER("LOCATION: ../"); ?>

wieder zum Hauptverzeichnis geleitet.

Dort wo sich auch ganz normale Website-Besucher aufhalten frage ich nun jedes mal ab ob

[PHP_AUTH_USER] und [PHP_AUTH_PW] gesetzt sind.

und gewähre den Editier-Modus.

Ist diese Methode sicher?

____________
 Vorab-FAQ: |
F: Warum nicht einfach alles in ein geschütztes Verzeichnis?
A: Da ich die Homepage auch gleichzeitig als Content-Management benutzen wollte - Quasi WYSIWYG.. Das Menü wandelt sich im Editier-Modus in ein Multi-Menü um wo man auch diverse Einstellungsmöglichkeiten hat (Artikel löschen, Artikel Bearbeiten,etc)

Danke
 Kalle

  1. Yerf!

    Ist diese Methode sicher?

    Funktioniert diese Methode überhaupt?

    ____________
    Vorab-FAQ: |

    F: warum den .htacess-Schutz nicht nur auf alle *.php?
    A: >bitte hier einsetzen<

    Gruß,

    Harlequin

    --
    <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
    1. Yerf!

      Ist diese Methode sicher?

      Funktioniert diese Methode überhaupt?

      Ja schon, aber ob das Sicher ist?!
      Hab mir mittels

      print "<pre>";
      print_r($_SERVER);
      #print_r($_GET);
      #print_r($_POST);
      #print_r($_REQUEST);
      #print_r($_FILES);
      print "</pre>";
      (Ist ne Code-Snippet ausm eclipse ;-)- fehlt da eigentlich noch was?)

      die httaccess-Variablen anzeigen lassen und das Funktioniert alles so wie ich mir das vorstelle!

      ____________
      Vorab-FAQ: |
      F: warum den .htacess-Schutz nicht nur auf alle *.php?

      A: Weil in dem config-Verzeichnis worüber man sich anmeledet auch der tinymce drin ist UND wenn ich auf die *.php-files im Hauptverzeichnis einen Schutz setze dann geht die Homepage ja überhaupt nicht mehr!

      Kalle

      1. Yerf!

        die httaccess-Variablen anzeigen lassen und das Funktioniert alles so wie ich mir das vorstelle!

        Hm, verwundert mich jetzt ein wenig... ich hätte erwartet, dass nach der Umleitung die Anmelde-Daten wieder weg sind (Da ja zum Abrufen der Dateien aus dem Hauptverzeichnis kein Passwort erforderlich ist).

        Ansonsten sollte die Variante aber eigentlich sicher sein. Die abgefragten Daten können ja nur da sein, wenn vorher eine entsprechende Anmeldung erfolgreich war.

        A: Weil in dem config-Verzeichnis worüber man sich anmeledet auch der tinymce drin ist UND wenn ich auf die *.php-files im Hauptverzeichnis einen Schutz setze dann geht die Homepage ja überhaupt nicht mehr!

        Dein erstes Posting hatte sich so angehört, als würde die Webseite zum reinen Anzeigen keine *.php benötigen.

        Hm, aber evtl. kann man ja eine 2. Endung (.sphp oder so) einführen, die ebenfalls von PHP ausgeführt wird und dann den Schutz auf diese Endung legen?

        Gruß,

        Harlequin

        --
        <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
        1. Hey,

          Ansonsten sollte die Variante aber eigentlich sicher sein. Die abgefragten Daten können ja nur da sein, wenn vorher eine entsprechende Anmeldung erfolgreich war.

          Genau, woher sollen die Werte sonst herkommen.
          Das ist ja genau die Frage.
          Kann man das irgendwie manipulieren.
          Anmelde Daten an ein Script zu schicken, dass gar keine Authentifizierung benötigt.

          Hm, aber evtl. kann man ja eine 2. Endung (.sphp oder so) einführen, die ebenfalls von PHP ausgeführt wird und dann den Schutz auf diese Endung legen?

          Ja ne,

          Weil in dem config-Verzeichnis worüber man sich anmeledet auch der tinymce drin ist...

          :-)

          Kalle

          1. Yerf!

            Kann man das irgendwie manipulieren.
            Anmelde Daten an ein Script zu schicken, dass gar keine Authentifizierung benötigt.

            Natürlich kann man sich beliebige HTTP-Requests zusammenbauen, aber da ja in deinen Feldern sowohl Name als auch Passwort enthalten sind muss ein Angreifer auch beides kennen und dann kann er ja auch über die normale Anmeldung gehen und muss nicht mehr rumtricksen...

            Da fällt mir grad so ein Logikproblem ein: dann müsste ja jede .php prüfen ob Name und PWD stimmen, eine Arbeit die man ja eigentlich per .htaccess an den Apache abgeben wollte. Wobei noch die Frage ist, ob der Apache die Felder [PHP_AUTH_USER] und [PHP_AUTH_PW] ohne erfolgreichen Anmelde-Vorgang überhaupt füllt. Das kann ich jetzt so nicht beantworten (meine erste Annahme zu diesen Feldern, dass die spätestens nach dem Redirect weg wären war ja schon falsch...)

            Vielleicht auch einfach den ganzen Knoten so lösen, dass in der geschützten login.php eine Session gestartet wird und darin ein Parameteter "Login = true" abgelegt wird. Der kann sicher nicht von außen beeinflusst werden und dann auf den Folgeseiten als Berechtigung abgefragt werden.

            Ja ne,

            Weil in dem config-Verzeichnis worüber man sich anmeledet auch der tinymce drin ist...
            :-)

            a) ich dachte der wäre rein JS?
            b) *im* Config-Verzeichnis ists doch egal, es geht doch nur um das Hauptverzeichnis, oder?

            Gruß,

            Harlequin

            --
            <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
            1. Yerf!

              Kann man das irgendwie manipulieren.
              Anmelde Daten an ein Script zu schicken, dass gar keine Authentifizierung benötigt.

              Natürlich kann man sich beliebige HTTP-Requests zusammenbauen, aber da ja in deinen Feldern sowohl Name als auch Passwort enthalten sind muss ein Angreifer auch beides kennen und dann kann er ja auch über die normale Anmeldung gehen und muss nicht mehr rumtricksen...

              Wie HTTP-Requests zusammenbauen?
              Sollte ich das Passwort nochmals über die Datenbank abfragen?
              Dann müsste ich das PWD auf der DB hinterlegen obwohl es nur ein benutzer gibt :-/
              Derzeit frage ich nur ob USER und PWD überhaupt gesetzt wurde..

              Da fällt mir grad so ein Logikproblem ein: dann müsste ja jede .php prüfen ob Name und PWD stimmen,...

              Ja allerdings :-o
              Soviele Dateien sind es nicht :-)

              Wobei noch die Frage ist, ob der Apache die Felder [PHP_AUTH_USER] und [PHP_AUTH_PW] ohne erfolgreichen Anmelde-Vorgang überhaupt füllt.

              Nein, ohne erfolgreiche Anmeldung gibt es auch keine Felder!
              Das waren zumindest meine Testergebnisse.

              Vielleicht auch einfach den ganzen Knoten so lösen, dass in der geschützten login.php eine Session gestartet wird und darin ein Parameteter "Login = true" abgelegt wird. Der kann sicher nicht von außen beeinflusst werden und dann auf den Folgeseiten als Berechtigung abgefragt werden.

              och nö net schon wieder sessions..
              a) Ich mach einfach eine auth.inc.php
              und Includiere Sie in die paar Dateien
              b) wie bereits von dir erwähnt eine .sphp Endung über .htaccess Schützen
              Frage zu b: Sicher das, dass noch eine gültige .php-Datei ist??
              Würde *.secure.php auch gehen?

              Ja ne,

              Weil in dem config-Verzeichnis worüber man sich anmeledet auch der tinymce drin ist...
              :-)

              a) ich dachte der wäre rein JS?

              Hab das teil so umgebaut, dass der erstellte Content auch direkt in die DB einspeist!

              b) *im* Config-Verzeichnis ists doch egal, es geht doch nur um das Hauptverzeichnis, oder?

              ja ne, Das Config-Verzeichnis ist das Verzeichnis das die Authentifizierung möglich macht und hier ist der TinyMce drin eingebaut der ja auch geschützt sein MUSS (Der ist dann komplett .htaccess geschützt)
              »

              Kalle

              1. Yerf!

                Wie HTTP-Requests zusammenbauen?

                Wenn du Windows hast, kannst du dir ja mal das Tool Fiddler2 (ist von Microsoft) anschauen. Das ist ein prox, der jeden request mitlogt. Da hat man dann die Möglichkeit Requests zu kopieren, modifizieren und erneut abzuschicken (oder gleich alle HTTP-Daten selber einzugeben).

                Es gibt aber auch andere Möglichkeiten eigen Requests zu bauen (z.B. auch per PHP).

                Sollte ich das Passwort nochmals über die Datenbank abfragen?
                Dann müsste ich das PWD auf der DB hinterlegen obwohl es nur ein benutzer gibt :-/

                Dass war das Logikproblem, das mir da aufgefallen ist...

                Derzeit frage ich nur ob USER und PWD überhaupt gesetzt wurde..

                Da bin ich mir eben nicht sicher, ob das gesetzt reicht...

                Wobei noch die Frage ist, ob der Apache die Felder [PHP_AUTH_USER] und [PHP_AUTH_PW] ohne erfolgreichen Anmelde-Vorgang überhaupt füllt.
                Nein, ohne erfolgreiche Anmeldung gibt es auch keine Felder!
                Das waren zumindest meine Testergebnisse.

                So sollte es sein, dann sollte auch ein reines Überprüfen auf Vorhandensein reichen. (Ich weis dass ich hier jetzt mehr rumrätsel statt brauchbare Aussagen liefere... vielleicht kommt ja noch jemand vorbei der die Ecke genauer kennt)

                och nö net schon wieder sessions..

                ;-)

                a) Ich mach einfach eine auth.inc.php
                und Includiere Sie in die paar Dateien
                b) wie bereits von dir erwähnt eine .sphp Endung über .htaccess Schützen
                Frage zu b: Sicher das, dass noch eine gültige .php-Datei ist??

                Das müsste man dem Server noch extra erklären (in der Config), aber dann ja

                Würde *.secure.php auch gehen?

                Das müsste eigentlich auch gehen und sogar ohne Änderung an der Apache-Config.

                ja ne, Das Config-Verzeichnis ist das Verzeichnis das die Authentifizierung möglich macht und hier ist der TinyMce drin eingebaut der ja auch geschützt sein MUSS (Der ist dann komplett .htaccess geschützt)

                Eben, der ist komplett geschützt, deshalb ist keine Unterscheidung auf Basis der Endung (.sphp oder wie auch immer) notwendig.

                Gruß,

                Harlequin

                --
                <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
  2. Hi,

    ist die Anmeldung erfolgreich wird man über die index.php mittels

    <? HEADER("LOCATION: ../"); ?>

    wieder zum Hauptverzeichnis geleitet.

    Das heisst, die Ressourcen, auf die der Zugriff nur nach Authentifizierung stattfinden soll, sind eigentlich gar nicht per HTTP Auth geschuetzt?

    Dort wo sich auch ganz normale Website-Besucher aufhalten frage ich nun jedes mal ab ob
    [PHP_AUTH_USER] und [PHP_AUTH_PW] gesetzt sind.
    und gewähre den Editier-Modus.

    Ist diese Methode sicher?

    Da habe ich irgendwie Zweifel dran.

    Hast du mal ausprobiert, einer der pseudo-geschuetzten Ressourcen beim Aufruf einfach irgendwelche "Login"-Daten zu uebergeben?
    Ehrlich gesagt weiss ich nicht, wie der Apache reagiert, wenn diese mit uebergeben werden, ohne von ihm explizit "angefordert" worden zu sein.

    MfG ChrisB