Frank: Datensätze wie verarbeiten?

Guten Abend,

ich habe mich in letzter Zeit viel um das Thema Datenbanken etc. gekümmert. Speziel um eine Frage:

Wie sollte man am besten die Daten behandeln BEVOR die Daten in die Datenbank kommen? Einige sagen dazu, man sollte die Funktion htmlspecialchars() benutzen, andere sagen das ist quatsch - man sollte lieber die funktion mysql_real_escape_string() benutzen. Andere wieder sagen, man sollte beide Funktionen verwenden?

Soweit ich mich jetzt schon einlesen konnte, ist die funktion mysql_real_escape_string() dafür da sonderzeichen wie ' zu escapen. Die funktion htmlspecialchars() ist dazu da sonderzeichen wie ' zu entfernen (wenn der optionale parameter ENT_QUOTES gesetzt ist).

Die Frage um die es eig. geht ist also, in welcher Form man die Datenbank am besten bringen sollte. Sollte man lieber die Funktion mysql_real_escape_string() benutzen, um Daten im klartext mit allen Zeichen in die DB zu bringen, um sie erst beim auslesen mit htmlspecialchars() zu benutzen oder sofort mit der funktion htmlspecialchars() um sich dann bei der Ausgabe darum nicht mehr zu kümmern?

Derzeit lasse ich folgende Funktionen über meine Daten laufen bevor sie gespeichert werden:

1. htmlspecialchars() + 'ENT_QUOTES'
2. trim()
3. stripslashes()

ist da mysql_real_escape_string() doch noch wichtig? ich bin überfragt, weil wirklich jeder etwas anderes sagt. Ich hoffe ihr könnt mich nun endlich aufklären, wie die Daten am besten in der Datenbank aufgehoben sind und mit welchen Funktionen sie vorher und nachher behandelt werden sollen.

--
Frank
  1. Hallo Frank,

    ich habe mich in letzter Zeit viel um das Thema Datenbanken etc. gekümmert. Speziel um eine Frage:

    Wie sollte man am besten die Daten behandeln BEVOR die Daten in die Datenbank kommen? Einige sagen dazu, man sollte die Funktion htmlspecialchars() benutzen,

    Das ist in den meisten Fällen unsinnig. Sinnvoll ist es meiner Meinung nach, Rohdaten zu speichern.

    man sollte lieber die funktion mysql_real_escape_string() benutzen.

    wenn Du mysql_query benutzt, kommst Du bei Eingabedaten überhaupt nicht um diese Funktion herum.

    Andere wieder sagen, man sollte beide Funktionen verwenden?

    Das ist in den meisten Fällen unsinnig, weil es meiner Meinung nach sinnvoll ist, Rohdaten zu speichern.

    Soweit ich mich jetzt schon einlesen konnte, ist die funktion mysql_real_escape_string() dafür da sonderzeichen wie ' zu escapen. Die funktion htmlspecialchars() ist dazu da sonderzeichen wie ' zu entfernen

    Nein, html_special_chars() wandelt bestimmte Zeichen um, die in HTML eine bestimmte Bedeutung haben. Du denkst derzeit an Datenbanken, an SQL. Da ist HTML völlig irrelevant.

    Die Frage um die es eig. geht ist also, in welcher Form man die Datenbank am besten bringen sollte. Sollte man lieber die Funktion mysql_real_escape_string() benutzen, um Daten im klartext mit allen Zeichen in die DB zu bringen,

    Ja - und vergiß bitte nicht, ganz zu Beginn in Abhängigkeit der Magic Quotes ggf. stripslashes auf die Daten anzuwenden.

    um sie erst beim auslesen mit htmlspecialchars() zu benutzen

    Nein, nicht beim Auslesen. Beim Ausgeben in einem HTML-Kontext. Sonst ist das völlig überflüssig. Datenbanken existieren nicht nur im Webumfeld.

    Derzeit lasse ich folgende Funktionen über meine Daten laufen bevor sie gespeichert werden:

    1. htmlspecialchars() + 'ENT_QUOTES'

    Meiner Meinung nach unsinnig.

    1. trim()

    Das kann in Abhängigkeit vom Umfeld unsinnig sein.

    1. stripslashes()

    Das ist nur in Abhängigkeit von magic_quotes_gpc sinnvoll, nicht generell. Du solltest zudem an Arrays denken.

    ist da mysql_real_escape_string() doch noch wichtig?

    Ja, Dein Vorgehen ist alles andere als sinnvoll und zielgerichtet. Du schlägst blind um Dich, sonst nichts. Lies Dir bitte folgendes  Posting von dedlfix in der aktuellen Forumshauptdatei durch. Das erklärt das ganz gut.

    Freundliche Grüße

    Vinzenz

  2. moin,

    Wie sollte man am besten die Daten behandeln BEVOR die Daten in die Datenbank kommen? [..]

    Wie Vinzenz schon schrieb: Die Daten möglichst unverändert erfassen (Rohdaten).

    Es gibt jedoch, zumindest in PERL eine Methode, auf die ich gerne zurückkomme: quote();

    $quoted_string = $databaseHandler->quote($raw);

    Das erlaubt z.b., dass in $raw Zeichen wie ' oder " vorkommen dürfen, wobei ohne quote() ein INSERT evntl. in die Hose geht.

    --roro