Kasandra: Formularfelder per EMail versenden, sicher!

ich habe  ein Formular, das man auf meiner Webseite ausfüllen kann, nach dem absenden schicke ich es an mich. Jetzt hab ich gelsen, das man auch Schadcode damit übermitteln kann. Wie kann ich dem vorbeugen.

Ich habe folgende Formularfelder:

Name
Email
Betreff
Text

diese würde ich gerne so sichern, das kein Schadcode beim versenden drin ist.

Gibt es dafür umwandlungen in PHP.

Gruß

Kasandra

    1. Wenn ich es richtig verstehe, müsste es so funktionieren und sicher sein:

      mysql_real_escape_string(htmlentities('Daten aus dem Formular'));

      1. Om nah hoo pez nyeetz, Kasandra!

        diese würde ich gerne so sichern, das kein Schadcode beim versenden drin ist.

        Wenn ich es richtig verstehe, müsste es so funktionieren und sicher sein:

        mysql_real_escape_string(htmlentities('Daten aus dem Formular'));

        Du musst immer nur das escapen, was tatsächlich Schaden anrichten kann. Also beispielsweise SQL-Syntax, wenn du die Daten in einer Datenbank speichern möchtest.

        ⇒ mysql_real_escape_string('Daten aus dem Formular');

        Die besonderen HTML-Zeichen können und sollen dabei ruhig in der DB stehen. htmlentities ist dabei natürlich der overkill, denn, eine sinnvolle Zeichenkodierung (UTF-8) und deren korrekte Angabe vorausgesetzt, müssen die Umlaute nicht verstümmelt werden. Du kannst also vergessen, dass du je wusstest, dass die Funktion htmlentities existiert. ;-)

        Bei der Ausgabe im HTML-Kontext können natürlich auch wieder Probleme auftauchen. Dafür ist htmlspecialchars (konvertiert nur >, <, & sowie je nach Einstellung Anführungszeichen) ausreichend.

        ⇒ htmlspecialchars('Daten aus der Datenbank')

        Dann kann dir auch keiner schädlichen, nervigen JavaScript-Code unerschieben, weil aus
        „<script … >“ „&lt;script … &gt;“ wird, was im Browser wieder als „<script … >“ dargestellt wird ohne ein HTML-Tag zu sein.

        Matthias

        --
        Der Unterschied zwischen Java und JavaScript ist größer als der zwischen xi und Xiberg.

        1. Moin

          ⇒ htmlspecialchars('Daten aus der Datenbank')

          Dann kann dir auch keiner schädlichen, nervigen JavaScript-Code unerschieben, weil aus
          „<script … >“ „&lt;script … &gt;“ wird, was im Browser wieder als „<script … >“ dargestellt wird ohne ein HTML-Tag zu sein.

          Wenn man die tags komplett entfernen möchte kann man vor htmlspecialchars noch die Funktion strip_tags () anwenden, die jegliche html-tags aus dem Text entfernt.

          Gruß Bobby

          --
          -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
          ### Henry L. Mencken ###
          -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
          ## Viktor Frankl ###
          ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
      2. Tach!

        Wenn ich es richtig verstehe, müsste es so funktionieren und sicher sein:
        mysql_real_escape_string(htmlentities('Daten aus dem Formular'));

        Eine Email ist kein Gemisch aus Datenbank und HTML. Insbesondere nicht die Kopfzeilen. Im verlinkten Kontextwechsel-Artikel steht doch drin, was bei Email zu beachten ist.

        dedlfix.