felix: Sichere Formularverarbeitung

Hallo,

ich muß öfter Formulardaten in eine Datenbank schreiben (Name, Adresse, ...) oder als Suchquery in einer Datenbank verwenden.

Was ist denn so üblich damit mir da nicht jemand ein "drop table" oder so etwas als Name einfügt?

Gibt es eine Möglichkeit alle übergebenen Variablen zu überprüfen auf Sonderzeichen, so man nicht einzelne Variable namentlich überprüfen muss?

Wie geht eine sicher Formularverarbeitung?

Grüsse
Volker

  1. ich muß öfter Formulardaten in eine Datenbank schreiben (Name, Adresse, ...) oder als Suchquery in einer Datenbank verwenden.

    Was ist denn so üblich damit mir da nicht jemand ein "drop table" oder so etwas als Name einfügt?

    Nein, manchmal funktioniert das auch garnicht, weil die Schnittstelle nur einen Befehl annimmt. Nichtsdestotrotz kann man zum Beispiel durch Eingabe von Anführungszeichen Deine Abfrage zerlegen. Das ist dann zwar nicht schlimm für Dich, aber für den Benutzer.

    Gibt es eine Möglichkeit alle übergebenen Variablen zu überprüfen auf Sonderzeichen, so man nicht einzelne Variable namentlich überprüfen muss?

    Für MySQL mysql_escape_string(). Andere Schnittstellen bieten entweder ähnliche Funktionen oder man greift auf addslashes() zurück. Ein kurzer Blick in das Kapitel zu Deiner Datenbank in der PHP-Anleitung schafft Klärung.

    Gruß,
      soenk.e

    1. Hi Sönke,

      Für MySQL mysql_escape_string(). Andere Schnittstellen bieten entweder ähnliche Funktionen oder man greift auf addslashes() zurück. Ein kurzer Blick in das Kapitel zu Deiner Datenbank in der PHP-Anleitung schafft Klärung.

      Nun macht ja PHP für mich schon die Arbeit mit addslashes(), weil magic_quotes_gpc=on sind (war das der richtige Schalter?)

      Wenn man nun trotzdem den Sttring durch mysql_escape_string() schickt, was kommt dann nachher dabei raus?

      Reicht das für den Uploead von Bildern (binary Data) in Blobs auch, die vorher durch mysql_escape_string() zu schicken? Bitte nimm das mit den Bildern jetzt nicht wörtlich...

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

      Tom

      --
      Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
      1. Hallo!

        Nun macht ja PHP für mich schon die Arbeit mit addslashes(), weil magic_quotes_gpc=on sind (war das der richtige Schalter?)

        Kommt drauf an was Du ereiche willst, siehe
        http://www.php3.de/manual/de/configuration.php#ini.magic-quotes-gpc
        http://www.php3.de/manual/de/configuration.php#ini.magic-quotes-runtime

        Wenn man nun trotzdem den Sttring durch mysql_escape_string() schickt, was kommt dann nachher dabei raus?

        probiers ;-)

        vermutlich dasselbe wie bei addslashes(addslashes("h'a\ll'\o"));

        Reicht das für den Uploead von Bildern (binary Data) in Blobs auch, die vorher durch mysql_escape_string() zu schicken? Bitte nimm das mit den Bildern jetzt nicht wörtlich...

        Unnter http://www.dclp-faq.de/q/q-mysql-blob.html steht (verlinkt) wie man es machen soll, also mit addslashes. Ich vermute das mysql_escape_string ausreicht, das mußt Du versuchen. Entweder Du verwendest magic-quotes-runtime, wodurch die aus einer Datei ausgelesenen Daten direkt escaped werden, oder Du verwendest nur magic-quotes-gpc und für die Bilder manuell addslashes, oder vielleicht auch mysql_escape_string.

        Grüße
        Andreas

        PS: http://www.dclp-faq.de/q/q-db-blob.html *scnr*

        1. Nun macht ja PHP für mich schon die Arbeit mit addslashes(), weil magic_quotes_gpc=on sind (war das der richtige Schalter?)

          magic_quotes ist für Stümper ;)

          Reicht das für den Uploead von Bildern (binary Data) in Blobs auch, die vorher durch mysql_escape_string() zu schicken? Bitte nimm das mit den Bildern jetzt nicht wörtlich...

          Unter http://www.dclp-faq.de/q/q-mysql-blob.html steht (verlinkt) wie man es machen soll, also mit addslashes. Ich vermute das mysql_escape_string ausreicht, das mußt Du versuchen.

          mysql_escape_string() ist prinzipiell in jedem Falle besser als addslashes(), weil diese Funktion von MySQL allerhöchstselbst zur Verfügung gestellt wird. Originale sind Kopien in der Regel vorzuziehen.
          Das ändert allerdings nichts daran, daß beide Funktionen in der Praxis möglicherweise dasselbe veranstalten.

          Entweder Du verwendest magic-quotes-runtime, wodurch die aus einer Datei ausgelesenen Daten direkt escaped

          Als überzeugter magic_quotes-Hasser kann ich davon nur abraten. Ich habe -wie oben angedeutet- lieber das Original als eine in vorauseilender Vorsicht verpfuschte Kopie.

          Gruß,
            soenk.e