Text in Datenbank speichern

  • Hi,


    sorry das ich wiedermal ein Thema eröffne, aber ich hatte die Frage schon etwas länger im Kopf.


    Wenn man ein Benutzername usw in die Datenbank postet, wird die wegen der Sicherheit erstmal überprüft und gefiltert. Wie ist es aber bei einer Textarea wo alle Zeichen erlaubt sind? z.b wenn jemand auf Facebook etwas postet dann sind ja alle Zeichen erlaubt. Da kann man doch nichts filtern. (Kann man schon aber macht ja kein Sinn da der Benutzer ja die bestimmten Zeichen in seinem Beitrag haben möchte. Wie macht man das dann da wegen der Sicherheit wenn ich es jetzt in der DB speicher? Ausgeben tut man ja natürlich mit htmlspecialchars. Aber soll ich ohne irgendeiner Überprüfung oder sonst was den Text in die DB speichern?

  • Wenn man ein Benutzername usw in die Datenbank postet, wird die wegen der Sicherheit erstmal überprüft und gefiltert.

    Automatisch wird da erstmal gar nichts geprüft/gefiltert! Wo hast Du die Info her?


    Wie ist es aber bei einer Textarea wo alle Zeichen erlaubt sind?

    Genau wie bei jeder Eingabe. Formular-Textfelder werden alle gleich behandelt.


    z.b wenn jemand auf Facebook etwas postet dann sind ja alle Zeichen erlaubt.

    Wie in jedem Standard-Textfeld auch.


    Wie macht man das dann da wegen der Sicherheit wenn ich es jetzt in der DB speicher? Ausgeben tut man ja natürlich mit htmlspecialchars. Aber soll ich ohne irgendeiner Überprüfung oder sonst was den Text in die DB speichern?

    Für die Sicherheit bist Du als Entwickler zuständig.

  • Wenn ein Nutzer sich registriert und eine E-Mail eingibt wird überprüft ob die Email Valid ist und z.b nicht zu kurz oder nicht vorhanden. Dafür braucht man keine Info. Das ist so. Genau wie wenn man einen Vornamen eingibt. Da werden auch unnötige Zeichen gefiltert. Da sollen ja nur Buchstaben vorhanden sein und keine Ausrufezeichen usw.

  • Aber das macht nicht die Datenbank! Dafür tragen die Entwickler des Login auf Seiten Facebook die Verantwortung.

    Die Prüfung findet vor dem Speichern in der Datenbank statt.


    Ich weiß das dass die Datenbank nicht macht, hab mich dann falsch ausgedrückt, ich meine nach der Überprüfung usw wird es in die DB gesendet.

  • Ah ok, dann habe ich den Satz falsch verstanden, dann meinen wir das gleiche...

    Alles gut war mein Fehler. Wie hättest du aber eine Variable in eine DB gespeichert wo alle Zeichen erlaubt sind. Also bevor du die Variable in die DB sendest, wie hättest du die gesichert?

  • Das kommt immer auf den Fall drauf an, wenn es jetzt so'ne Facebook-Chat ähnliche Anwendung ist, würde ich vermutlich als erstes Script-Elemente filtern.

    Alles, was am Ende nur nicht schick ist, kann man auch bei der Ausgabe noch filtern, so hat man wenigstens den Original-Beitrag in der Datenbank.

  • Wenn man sich an paar Regeln hält, dann ist es eigtl ganz einfach:


    Daten kommen rein.

    Daten werden unverändert (zB) in der Datenbank gespeichert.

    User ruft Seite auf - Daten sollen ausgegeben werden -

    Daten werden aus der Datenbank geladen.

    Daten werden (zB) in HTML eingefügt und via htmlspecialchars() maskiert.

    Wir sind sicher.


    Das Prinzip ist: alle Daten sind unsicher. Auch die aus Deiner eigenen Datenbank.

    Du kannst Prüfen und Validieren wie ein Weltmeister - es kann immer etwas übersehen worden sein.


    Auch von Dir selbst erzeugte Daten - eine csv, eine erstelltes array mit Zahlen, ...

    Alle Daten sind unsicher.


    BTW: Nicht nur bei der "Ausgabe" (HTML, ...),

    sondern generell bei der Verwendung der Daten.

    ZB in einer MySQL-Query müssen alle Daten (Values) als unsicher angesehen werden.

    Deswegen nutzen wir ja auch alle Platzhalter (:username oder ? bei PDO bzw mysqli_ -Funktionen).



    Sanitize (Desinfizieren) - nur bedingt:

    Super Bsp: Passwort

    User gibt ein Passwort ein.

    User wollte ein Leerzeichen am Anfang seines Passwortes - also dürfen wir zB kein trim() auf $_POST['password'] anwenden.

    Es wird so wie es reinkommt gespeichert.


    Chat (Textbox)

    User gibt einen Haufen Mist ein (das Ganze Netz ist voll davon).

    Der eine gibt aus Versehen ein "<" ein, ein Anderer versucht etwas zu "Hacken".

    Der gesamte Text wird evtl auf "verbotene" Zeichen geprüft. Oder doppelte Leerzeichen werden entfernt ... Vlt auch komprimiert ...

    Aber am Ende geht der Text halbwegs unverändert in die Datenbank.

    Bei der Verwendung (zB Ausgabe HTML) wird dann darauf geachtet, dass der gesamte Text maskiert wird (htmlspecialchars()).

  • Daten kommen rein.

    Daten werden unverändert (zB) in der Datenbank gespeichert.

    Das würde ich nochmal überdenken. Code hat bspw. nichts in Datenbanken zu suchen. Auch wenn es den TE vielleicht nicht betrifft, sollte man aus meiner Sicht nicht den Tipp geben, pauschal die Daten unverändert in die DB zu schreiben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!