Aus Sicherheitsgründen als erstes Browserzeile mit regex überprüfen?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Aus Sicherheitsgründen als erstes Browserzeile mit regex überprüfen?

    Hallo.
    Bin noch neu in PHP und bin mir bei Folgendem nicht ganz sicher:

    Ist es eine kluge Idee, wenn man als aller Erstes alles, was in der Browserzeile nach der Basis-Webadresse kommt, per $_SERVER['SCRIPT_NAME'] abfängt und mit preg_match überprüft, dass nur Buchstaben, Zahlen, Unterstriche, Bindestriche, Punkte und der Slash enthalten sind?

    Ich würde gerne, falls nichts dagegen spricht, grundsätzlich als Erstes die index-Datei aufrufen, die das überprüft.
    Und falls nur diese Zeichen vorkommen, wird der Pfad intern aufgeschlüsselt.

    Ist das sicherheitstechnisch gut?

    Oder müsste das Ganze in die htaccess-Datei passieren?

    Grüße, codehacker

  • #2
    Ich sehe das nicht als Frage der Sicherheit, sondern als Frage der Sinnhaftigkeit. Kann die Anwendung etwas damit anfangen, wenn andere Zeichen als die genannten enthalten sind? Wenn nein, dann hast du doch eh schon eine Antwort auf die Frage. Entweder ein 404 Not Found oder ein 400 Bad Request an den Client zurück liefern.

    Die Web-Adresse findest du übrigens in $_SERVER['REQUEST_URI'] und nicht in $_SERVER['SCRIPT_NAME'].

    Kommentar


    • #3
      Zitat von codehacker Beitrag anzeigen
      Hallo.
      Ist es eine kluge Idee, wenn man als aller Erstes alles, was in der Browserzeile nach der Basis-Webadresse kommt, per $_SERVER['SCRIPT_NAME'] abfängt und mit preg_match überprüft, dass nur Buchstaben, Zahlen, Unterstriche, Bindestriche, Punkte und der Slash enthalten sind?
      Nein. Das meiste, was du in $_SERVER findest, ist als Nutzer-Eingabe zu betrachten. Nur bei Weiterverarbeitung dieser Werte ist zu prüfen, ob sie im aufgerufenen "Kontext" mehr tun, als nur toter Text zu sein. Dann hat die jeweilige verarbeitende Funktion die kritischen Bestandteile entsprechend umzuwandeln (mit htmlspecialchars(), rawurlencode(), PDO::quote() e.t.c.).

      Irgendetwas "bösartig Ausschauendes" ohne konkreten Verdacht "wegzulöschen", bringt nichts.

      Stellt sich noch die Frage, was du unter "Basis-Webadresse" verstehst (URL-Bestandteile haben festgelegte Namen): Nach dem Host-Namen kann ein Port kommen (beginnt mit ":"), danach ein Pfad (darf ";" und "=" als Parameter-Trenner enthalten) und Queries dürfen "?", "&", "=" und ";" als Trenn- und "%" als Escaping-Zeichen enthalten. So manches Server-Script verarbeitet diese Teile.

      Ich würde gerne, falls nichts dagegen spricht, grundsätzlich als Erstes die index-Datei aufrufen, die das überprüft.
      Ja, dafür gibts mod_rewrite (konfigurierbar per ".htaccess").
      Und falls nur diese Zeichen vorkommen, wird der Pfad intern aufgeschlüsselt.
      In einer URL kommen grundsätzlich nur die Zeichen vor, die da erlaubt sind. So lange sie als URL betrachtet wird, macht da nichts Probleme.
      Oder müsste das Ganze in die htaccess-Datei passieren?
      Warum muss etwas passieren? Dein PHP-(Index-)Script nimmt sich die Bestandteile, die es braucht und konvertiert sie entsprechend, falls es sie wieder zurückgibt. Den Rest kann es gefahrlos ignorieren.
      Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

      Kommentar


      • #4
        Ich hatte in die htaccess-Datei reingeschrieben gehabt:
        Code:
        RewriteEngine On
        RewriteCond %{REQUEST_URI} !=/index.php
        RewriteRule ([\-./0-9A-Z_a-z]*)$ /index.php?verzeichnispfad=$1 [L,R=301]
        um URL-Manipulation zu verhindern, aber gleichzeitig den Pfad weiterverarbeiten zu können. Sonst landet der User, wenn er auf einen Untermenüpunkt klickt, immer auf der Startseite.
        Jetzt merke ich, dass es so viele verschiedene Angriffsmöglichkeiten gibt, XSS, SSI, SQL-Injections, ... da weiß ich echt nicht, wo ich anfangen soll, sichere, d.h. uncrackbare Webseiten zu erstellen.

        Kriegt ihr das hin, uncrackbare Webseiten zu erstellen?
        Wenn ich bedenke, dass eine Webseite auch noch responsive sein soll, leicht an Kundenwünsche anpassbar, SEO, wartbar, schnell, sichere Übertragung von Passwörtern, und weiß der Geier was es noch alles gibt.
        Wie würdet ihr da vorgehen?

        Kommentar


        • #5
          Zitat von codehacker Beitrag anzeigen
          Ich hatte in die htaccess-Datei reingeschrieben gehabt:
          Code:
          RewriteEngine On
          RewriteCond %{REQUEST_URI} !=/index.php
          RewriteRule ([\-./0-9A-Z_a-z]*)$ /index.php?verzeichnispfad=$1 [L,R=301]
          Verwende besser sowas:
          Code:
          RewriteEngine On
          RewriteCond %{REQUEST_FILENAME} -s [OR]
          RewriteCond %{REQUEST_FILENAME} -l [OR]
          RewriteCond %{REQUEST_FILENAME} -d
          RewriteRule ^.*$ - [NC,L]
          RewriteRule ^.*$ index.php [NC,L]
          Quelle: Leitfaden für die Rewrite Konfiguration - Empfohlene Projektstruktur für Zend Framework MVC Anwendungen - Zend Framework

          Kommentar

          Lädt...
          X