mcgeek: Globaler Filter für $_GET und $_POST?

Hallo,

ich habe da mal eine ganz spezielle Frage (bitte nicht gleich schlagen!):

Gibt es eine Möglichkeit, zu Beginn einer PHP-Seite automatisch alle Werte, die in den Arrays $_GET und $_POST vorhanden sind, durch einen Filter laufen zu lassen?

Ich dachte mir, so eine tolle Sprache wie PHP hat dafür vielleicht einen Workaround.

Freue mich auf Tipps.

Gruß aus Sachsenheim

Danny

  1. @@mcgeek:

    nuqneH

    Gibt es eine Möglichkeit, zu Beginn einer PHP-Seite automatisch alle Werte, die in den Arrays $_GET und $_POST vorhanden sind, durch einen Filter laufen zu lassen?

    Der was tun sollte?

    Ich dachte mir, so eine tolle Sprache wie PHP hat dafür vielleicht einen Workaround.

    Für welches Problem?

    Freue mich auf Tipps.

    Konkrete Probembeschreibung, konkrete Fragen.

    Qapla'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)
    1. Hallo Gunnar,

      ich möchte unbedingt alle Daten, die vom Client zum Server übertragen werden, auf potentiell gefährliche Zeichen bzw. Textfragmente überprüfen bzw. diese komplett rauswerfen. Oder ist das übertrieben?

      Gruß

      Danny

      1. مرحبا

        Oder ist das übertrieben?

        Ja.
        Du brauchst nur prüfen, was du gerade brauchst, nicht Präventiv alles.

        mfg

        1. Hello,

          Du brauchst nur prüfen, was du gerade brauchst, nicht Präventiv alles.

          Wer alles prüft, was kommt, kann auch leicht feststellen, dass Unerwünschtes dabei ist. Dann kann er entscheiden, ob er den Request verwirft, "sanitized" und bearbeitet, oder den Requestor in die Irre schickt mit einer ebenfalls gefakten Antwort (*das mach am meisten Spaß*).

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
           ☻_
          /▌
          / \ Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
          1. مرحبا

            Wer alles prüft, was kommt, kann auch leicht feststellen, dass Unerwünschtes dabei ist.

            Was passiert, wenn man 200 bis 300, oder gar mehr dieser Requests hat, für alle möglichen Features?
            Soll man alle gleich am anfang des Scriptes durchgehen? Kann ich mir kaum vorstellen.

            oder den Requestor in die Irre schickt mit einer ebenfalls gefakten Antwort (*das mach am meisten Spaß*).

            Ja, das macht wirklich Spass ;)

            mfg

          2. Wer alles prüft, was kommt, kann auch leicht feststellen, dass Unerwünschtes dabei ist. Dann kann er entscheiden, ob er den Request verwirft, "sanitized" und bearbeitet, oder den Requestor in die Irre schickt mit einer ebenfalls gefakten Antwort (*das mach am meisten Spaß*).

            Das macht man aber möglichst früh: in einer Firewall, in der Webserver-Software oder in einen frühen Level der Programmiersprache.

            Für sowas gibts genug fertige Lösungen - für PHP z.B. Suhosin.

            1. Tach!

              Wer alles prüft, was kommt, kann auch leicht feststellen, dass Unerwünschtes dabei ist. Dann kann er entscheiden, ob er den Request verwirft, "sanitized" und bearbeitet, oder den Requestor in die Irre schickt mit einer ebenfalls gefakten Antwort (*das mach am meisten Spaß*).
              Das macht man aber möglichst früh: in einer Firewall, in der Webserver-Software oder in einen frühen Level der Programmiersprache.

              Woher will denn die Firewall etc. wissen, welche Werte für meine Anwendung unerwünscht sind? Was du prüfen willst, sind Dinge, die generell für den Server, den Webserver oder Webanwendungen unerwünscht sind, wie fehlerhafte Datenpakete, Angriffe auf Netzwerkebene oder Zugriffe von unerwünschten Stellen (weil die zum Bespiel sowieso nur spammen oder das System überlasten wollen).

              dedlfix.

              1. Woher will denn die Firewall etc. wissen, welche Werte für meine Anwendung unerwünscht sind?

                Deep packet inspection ist nun wirklich nichts neues - natürlich muss der Firewall vorher bekannt sein, wie die Daten auszusehen haben - so können auf jeden Fall ungültige Dinge gleich vorweg gefiltert werden.

                Was du prüfen willst, sind Dinge, die generell für den Server, den Webserver oder Webanwendungen unerwünscht sind, wie fehlerhafte Datenpakete, Angriffe auf Netzwerkebene oder Zugriffe von unerwünschten Stellen (weil die zum Bespiel sowieso nur spammen oder das System überlasten wollen).

                Ja - das habe ich gemeint, damit lässt sich natürlich nicht exakt ausfiltern was gut und schlecht ist, aber prinzipiell was "schlecht" ist (von false positives mal abgesehen).

                1. Tach!

                  Woher will denn die Firewall etc. wissen, welche Werte für meine Anwendung unerwünscht sind?
                  Deep packet inspection ist nun wirklich nichts neues - natürlich muss der Firewall vorher bekannt sein, wie die Daten auszusehen haben - so können auf jeden Fall ungültige Dinge gleich vorweg gefiltert werden.

                  Das ist vielleicht ein Baustein, löst aber das Problem des OP nicht generell. Dine Aussage klang so allgemeingültig. Die Betonung muss auch hier auf "einige bestimmte Szenarien" liegen, die man berücksichtigen kann. Denn wie auch mit dem Versuch des OP, am Anfang alles Schlechte wegzufiltern, kann das nicht für alle möglichen späteren Verarbeitungsschritte funktionieren. (Oder man lässt nur a-zA-Z0-9 zu ...)

                  dedlfix.

      2. Hi,

        ich möchte unbedingt alle Daten, die vom Client zum Server übertragen werden, auf potentiell gefährliche Zeichen bzw. Textfragmente überprüfen bzw. diese komplett rauswerfen. Oder ist das übertrieben?

        Ja. Insb., weil es "potentiell gefährliche Zeichen" gar nicht generell gibt.

        Es kommt immer auf den Kontext an. Wenn du diesbezüglich noch Verständnisprobleme bzw. Wissenlücken hast, arbeite bitte zuerst diesen Artikel vollständig durch: http://wiki.selfhtml.org/wiki/Artikel:Kontextwechsel

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
      3. @@mcgeek:

        nuqneH

        ich möchte unbedingt alle Daten, die vom Client zum Server übertragen werden, auf potentiell gefährliche Zeichen bzw. Textfragmente überprüfen bzw. diese komplett rauswerfen.

        Aber nicht beim Datenempfang!

        Sondern bei der Ausgabe:

        Wenn du die Daten in eine Datenbank schreibst, möchtest du bspw. NICHT vorher '<' in '&lt;' umwandeln, sondern '<' unverändert in der DB haben. Beim Schreiben in die SQL-DB möchtest du die Daten so behandeln, dass keine SQL-Injections möglich sind.

        Wenn du die Daten in auf eine Webseite ausgibst, d.h. in den HTML-Quelltext schreibst, DANN möchtest du '<' in '&lt;' umwandeln, damit kein XSS möglich ist.

        Wie schon gesagt wurde: Die Behandlung der Daten hägt immer vom jeweiligen Kontext ab.

        Qapla'

        --
        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
        (Mark Twain)
  2. Hello,

    Gibt es eine Möglichkeit, zu Beginn einer PHP-Seite automatisch alle Werte, die in den Arrays $_GET und $_POST vorhanden sind, durch einen Filter laufen zu lassen?

    Klar gibt es die. Habe ich hier acuh oft genug schon erwähnt. Diese Spitze geht jetzt weniger gegen Dich, als gegen deinen Nachposgter :-D

    Du hättest aber mittels Forumssuche auch Beiträge gefunden dazu

    Schau Dir bitte die Handbuchseiten
    http://de.php.net/manual/en/book.filter.php
    an.

    Filterung steht quasi in Korrespondenz mit Tabellen (hier als "Arrays" realisiert) und polimorpher Abarbeitung.

    Du planst Dein Projekt dann also Formular für Formular als Tabellen, schaffst Dir eine Möglichkeit (Editor), diese elegant in Dateien zu verpacken, schreibst einen Satz Standardfunktionen und alles andere läuft dann fast schon automatisch ab.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Tach!

      Gibt es eine Möglichkeit, zu Beginn einer PHP-Seite automatisch alle Werte, die in den Arrays $_GET und $_POST vorhanden sind, durch einen Filter laufen zu lassen?
      Klar gibt es die. Habe ich hier acuh oft genug schon erwähnt.
      Schau Dir bitte die Handbuchseiten http://de.php.net/manual/en/book.filter.php an.

      Filter sind ja schön und gut, nur beantwortet das lediglich die eingangs gestellte Frage, berücksichtigt jedoch nicht seinen Denkfehler, der sich auf die Nachfragen herausgestellt hat. Man kann die Filter verwenden, aber besser nur, um fachliche Anforderungen zu prüfen. Sämtliche Eingaben für alle möglichen Ausgabekontexte sanieren zu wollen, bleibt auch mit den Filtern eine unsinnige Angelegenheit. Selbst wenn man nur einen Ausgabekontext im Script hat, ist es günstiger sich nicht die Eingabewerte vor der eigentlichen Verarbeitung durch Maskierzeichen zu versauen.

      Diese Spitze geht jetzt weniger gegen Dich, als gegen deinen Nachposgter :-D
      Filterung steht quasi in Korrespondenz mit Tabellen (hier als "Arrays" realisiert) und polimorpher Abarbeitung.

      Du drückst dich grad (wieder mal) recht unverständlich aus. Wer bitte ist sein Nachposter? Meinst du die Anwortenden (wovon es mehrere sind und nicht nur einer)? Und was bitte ist eine polymorphe Abarbeitung? Die Wikipedia erläutert (mir) die Polymorphie nur für Dinge, nicht für Vorgänge.

      Du planst Dein Projekt dann also Formular für Formular als Tabellen, schaffst Dir eine Möglichkeit (Editor), diese elegant in Dateien zu verpacken, schreibst einen Satz Standardfunktionen und alles andere läuft dann fast schon automatisch ab.

      Du scheinst wesentlich mehr über sein Projekt zu wissen (und was dafür am besten sein soll), als der OP verlauten lassen hat.

      dedlfix.