Heiner: Rin in die Bank, rus uss der Bank??

Hi,

ich dachte immer, mit

$_POST['Information'] = stripslashes($_POST['Information']);
$_POST['Information'] = mysql_escape_string($_POST['Information']);

wären meine Daten für die Datenbank bestens gerüstet.

Aber nun stelle ich fest, daß ich Probleme mit einigen Zeichen habe, die mir mein Ausgabescript durcheinanderwürfeln.

Also bitte nochmal zum, mitschreiben. Was muß ich mit einer HTML-Formular-Eingabe (z.b. <input type="text" name="textfeld" size="20"> ) VOR dem "insert" in die Datenbank machen und was mache ich NACH dem rausholen aus der Datenbank, damit meine Ausgabe auch trotz Sonderzeichen ok ist???

Grüße

Heiner

  1. hi,

    ich dachte immer, mit
    $_POST['Information'] = stripslashes($_POST['Information']);
    $_POST['Information'] = mysql_escape_string($_POST['Information']);
    wären meine Daten für die Datenbank bestens gerüstet.

    mysql_escape_string ist auf jeden fall das wichtigste glied beim absichern von eingaben vor der aufnahme in die mysql-query.

    stripslashes sollte nur dann vorher verwendet werden, wenn die option magic_quotes_gpc aktiviert ist.
    dann werden nämlich schon bei der übertragung der formulardaten darin bestimmte sonderzeichen wie " oder \ durch einen vorangestellten \ maskiert, so dass du " und \ bekommst.
    diese einstellung ist eigentlich relativ wertlos - sie ist aber bei vielen providern aktiviert, um n00bs vor sich selbst zu schützen, die nämlich die anwendung von sicherungsmaßnahmen wie mysql_escape_string gar nicht berücksichtigen, und sich ohne diese hinzugefügten backslashes schnell probleme mit ihren datenbank-queries einhandeln würden.

    Aber nun stelle ich fest, daß ich Probleme mit einigen Zeichen habe, die mir mein Ausgabescript durcheinanderwürfeln.

    welche zeichen wären das, und welche probleme?
    wenn es sich wie oben beschrieben um probleme mit ", ' oder \ handelt, überprüfe zunächst einmal deine einstellung von magic_quotes_gpc; schau es entweder mit phpinfo() nach, oder verwende get_magic_quotes_gpc().

    Also bitte nochmal zum, mitschreiben. Was muß ich mit einer HTML-Formular-Eingabe (z.b. <input type="text" name="textfeld" size="20"> ) VOR dem "insert" in die Datenbank machen und was mache ich NACH dem rausholen aus der Datenbank, damit meine Ausgabe auch trotz Sonderzeichen ok ist???

    vorher: eventuell(!) maskierungen entfernen (stripslashes), _falls_ magic_quotes_gpc aktiviert ist.

    dann die daten mit mysql_escape_string behandeln, damit sind sie genügend abgesichert.
    wenn du nicht mit dem "üblichen" westeuropäischen zeichensatz arbeitest, könnte evtl. auch mysql_real_escape_string() interessant sein, das berücksichtigt auch noch die spezielle code page, die für die daten verwendet wird.

    so, damit hätten wir die daten eigentlich sicher für die eintragung in die DB.

    beim wieder ausgeben empfiehlt sich jetzt eigentlich nur noch, mit htmlspecialchars() bzw. htmlentities() zu arbeiten, um sonderzeichen wie < und > HTML-gerecht als < und > zu kodieren, bzw. je nach zeichensatz auch umlaute zu kodieren etc.

    es gibt übrigens auch noch ein "gegenstück" zu magic_quotes_gpc, nämlich magic_quotes_runtime. das würde, _falls_ es aktiviert ist, dafür sorgen, dass daten aus externen quellen (u.a. deiner datenbank) ebenfalls beim auslesen nochmals mit backslashes versehen werden, hier wäre dann nochmals ein stripslashes() angebracht.

    hoffe, die fragen zu deiner zufriedenheit beantwortet zu haben :-)

    wenn's noch probleme gibt, frag nochmal nach - allerdings müsstest du dann ein wenig detailiertere informationen liefern, was du machst und was falsch läuft.

    gruss,
    wahsaga

    1. Hi Wahsaga,

      danke für Deine Antwort. Genau mit den >< hatte ich Probs, die nun aber weg sind :-)
      Prima und danke nochmal

      Heiner