2008-10-21 4 views
26

Einfache Frage, die mich nervt.HTML codieren Benutzereingabe beim Speichern oder beim Anzeigen

Sollte ich HTML-Eingabe sofort codieren und den codierten Inhalt in der Datenbank speichern, oder sollte ich die Rohwerte und HTML-Codierung beim Anzeigen speichern?

Durch das Speichern von codierten Daten wird das Risiko erheblich reduziert, dass ein Entwickler die Codierung der Daten bei der Anzeige vergisst. Das Speichern der codierten Daten wird jedoch die Datenerfassung etwas mühsamer machen und es wird etwas mehr Platz einnehmen, obwohl dies normalerweise kein Problem ist.

Antwort

24

Ich würde dringend empfehlen, Informationen auf dem Weg nach draußen zu kodieren. Das Speichern von Rohdaten in der Datenbank ist nützlich, wenn Sie die Ansicht an einem bestimmten Punkt ändern möchten.

sanitize user input -> protect against sql injection -> db -> encode for display 

denken über eine Situation, wo Sie die Informationen als RSS-Feed statt angezeigt werden mögen: der Fluss sollte etwas ähnliches sein. Es ist ein wenig albern, eine HTML-spezifische Kodierung wiederholen zu müssen, bevor sie wieder angezeigt wird. Jede Entwicklung sollte immer dem Meme "nicht vertrauen" folgen, egal ob diese Eingabe von einem Benutzer oder von der Datenbank stammt.

+2

Wie funktionieren nachfolgende Abfragen, wenn Sie eine SELECT..WHERE ausführen, und einige der Werte haben HTML-Codierung und andere nicht? – DOK

+0

ugh, klingt irgendwie chaotisch. Es hängt wirklich von Ihren Besonderheiten ab, aber wenn ich ein Projekt geerbt habe, bei dem ich neue Ansichten erstellen musste und die Informationen halb verschlüsselt waren, würde ich die Informationen wahrscheinlich unverschlüsselt speichern, um das Leben auf lange Sicht zu vereinfachen. – Owen

+0

Wenn Ihr Codierungsprozess für die Anzeige teuer ist (z. B. wenn Sie HTML zulassen und HTML Purifier darauf ausführen), können Sie die gefilterte Version zwischenspeichern. Speicherplatz ist billig. –

5

Denken Sie daran, dass Sie möglicherweise auf die Datenbank mit etwas zugreifen müssen, das HTML-kodierten Text nicht versteht (z. B. ein Berichterstellungstool). Ich stimme zu, dass Platz kein Problem ist, aber IMHO, indem HTML-Codierung in die Datenbank eingefügt wird, verschiebt das Wissen über Ihre Ansicht/Ihr Frontend in die unterste Ebene in der Anwendung, und das ist ein Konstruktionsfehler.

+0

zustimmen! Dies wird zuerst ignoriert, wenn ppl tut, um XSS zu verhindern. – jack

+0

können Sie bitte einen Blick auf diese [Verwandte Frage] (http://stackoverflow.com/questions/22297015/should-i-save-in-db-user-input-as-html-encode) von mir? –

6

Die Codierung sollte nur nur im Display erfolgen. Ohne Ausnahme.

6

Ausgabe.

Mit HTML können Sie nicht einfach überprüfen Länge eines Strings (& 1 Zeichen ist, aber strlen() wird Ihnen sagen, 5), können Sie es leicht zuschneiden (es könnte Einheiten brechen).

Sie müssen möglicherweise Zeichenfolgen aus der Datenbank mit Zeichenfolgen aus einer anderen Quelle mischen oder sie lesen und schreiben. Es ist ein Albtraum, diese Anwendung durchgängig zu machen, ohne zu entkommen und Doppelflucht zu vermeiden.

PHP versucht, eine ähnliche Sache mit magic_quotes zu tun, und es stellte sich heraus, ein riesiger Fehler zu sein. Nimm keine magic_entities Route! :)

0

Beendet dies nicht den Zweck der Codierung? Wenn ein schädliches SQL-Skript als Eingabe eingegeben wird, das dann an die Datenbank übergeben wird, könnte dies ein großes Problem verursachen.

+0

Aus diesem Grund verwenden wir parametrisierte SQL und wir nutzen die Sicherheitseinstellungen. Die Lösung für sql injection ist Sicherheit: zB geben Sie den Benutzern der Webanwendung keinen direkten Zugriff auf Tabellen und Dyanmic SQL: Schreiben Sie niemals dynamische Skripte, die in eine Tabelle eingefügt werden sollen. Verwenden Sie Procs oder ORMs, um dies für Sie zu tun. –

Verwandte Themen