Sonderzeichen in Textarea werden nicht in DB gespeichert

Dsimon24

Lieutenant
Registriert
Aug. 2016
Beiträge
595
Servus zusammen,

ich versuche gerade ein paar Daten aus einer Textarea in eine Datenbank zu speichern.

Wenn ich innerhalb der Textarea &-Zeichen oder "-Zeichen einbinde,
wird alles ab dem entsprechenden Zeichen, nicht in die Datenbank
gespeichert.

So sieht der Code aus:

PHP:
        $id = $_POST['id'];
        $field = $_POST['field'];
        $value = htmlspecialchars(strip_tags($_POST['value']),
            ENT_QUOTES | ENT_HTML5, 'UTF-8');

        $stmt = $bewerber->runQuery("UPDATE dateien
        SET $field='$value' WHERE id='$id'");
        $stmt->execute();

Das Problem sollte doch eigentlich mit htmlspecialchars in
Verbindung mit (oder auch ohne) strip_tags behoben sein,
oder?

VG, David
 
Ich kenne mich mit PHP jetzt nicht wirklich aus, aber es sieht so aus als ob Du die Query einfach aus Strings zusammensetzt. Das größte Problem ist jetzt nicht das die Sonderzeichen nicht in der Datenbank landen, sondern das jeder der die Paramter id, field oder value im POST Request setzen kann deine Datenbank vollständig übernehmen kann.

Das ist ein ganz typisches Beispiel für SQL Injection, und eine enorme Sicherheitslücke. Jeder der diese Requests absetzen kann hat praktisch vollen Zugriff auf deine Datenbank.

Um das zu beheben sollte man grundsätzlich parametrized Queries verwenden in denen die Parameter separate von der Query übergeben werden. Das escapen/quoten mit htmlspecialchars oder strip_tags hilft hier nichts, der Datenbank sind HTML tags egal (solange Du sie nicht direkt aus der DB wieder in HTML ungeprüft reinsetzt). ';DROP DATABASE datenbankname; enthält kein HTML tag, und ausserdem sind id und field nicht gefiltert, dort kann man auch Befehle in die Datenbank an dem Filter vorbei einschleusen.
 
  • Gefällt mir
Reaktionen: Sparta8
Sehr gefährlich was du da machst.
Zu deiner Frage: Das & Zeichen wird umgewandelt in & und der Strichpunkt/Semikolon beendet dein Update statement.
 
  • Gefällt mir
Reaktionen: ayngush und Raijin
Geil... Sucht ihr damit zufällig gerade Entwickler?
 
  • Gefällt mir
Reaktionen: bog
ich denk die implikation ist die, dass der OP fuer solchen code rausgeschmissen gehoert.
 
Nein, ganz und gar nicht. Jeder kann lernen, die Frage ist nur, ob das sinnvoll ist ohne Kenntnisse so ein System produktiv aufzusetzen. Der Code im Eingangspost ist schon ziemlich abenteuerlich und ich würde den eher in einer Schule denn in einem betrieblichen Umfeld erwarten.

Ich komme darauf, da im Code steht: $bewerber->runQuery(...).
Also suchen sie ja wohl Personal und so wie es sich hier darstellt, fehlt ihnen wohl ein Senior Software Developer mit Erfahrung in Sachen "IT-Sicherheit bei der Entwicklung und Programmierung komplexer IT-Systeme". Deswegen meine Frage.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: heulendoch und bog
Mal ganz ehrlich, schaut Euch doch mal seine Beiträge an. Er beschäftigt sich seit 3 Jahren mit dem Thema Programmieren, keine Ahnung ob als Hobby oder Beruf und er ist noch nicht über Anfängerwissen und -probleme hinausgekommen. Und ihm wird immer geholfen hier... Was soll da noch groß rumkommen?
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: mental.dIseASe
So ist es. In dem Falle geht es zumindest um ein kleines privates
Projekt, was nur für mich ist. Also, Bewerber suchen wir nicht :)
Ich lerne derzeit auch noch. Jeder hat mal klein angefangen.
 
Zurück
Oben