2014-01-06 13 views
5

Ich bin ein wenig verwirrt darüber. Ich habe über htmlspecialchars() gelesen und ich plane, dies für die Textareas POST zu verwenden, um XSS-Angriff zu verhindern. Ich verstehe, dass normalerweise htmlspecialchars() verwendet werden, um die HTML-Ausgabe zu generieren, die an den Browser gesendet wird. Aber was ich nicht sicher bin, ist:Ist es gut, htmlspecialchars() vor dem Einfügen in MySQL zu verwenden?

1) Ist es eine sichere Praxis, die Benutzereingabedaten htmlspecialchars() zu verwenden, bevor ich es in MySQL einfüge? Ich verwende bereits PDO prepared-Anweisung mit parametrisierten Werten, um SQL Injection zu verhindern.

2) Oder brauche ich wirklich keine Sorgen über die Verwendung htmlspecialchars(), um Werte einzufügen (vorausgesetzt, sie sind parametrisiert) und nur htmlspecialchars() verwenden, wenn ich Ergebnisse von MySQL abrufen und den Benutzern anzeigen?

+5

# 2 ist die richtige Antwort – jszobody

+5

HTML-Escaping (1) ist nicht wirklich relevant für Ihre Datenbank. Gewöhnlich wird (2) bevorzugt, da ein vorzeitiges Entweichen später mit anderen Ausgabekanälen als einer Webseite interferieren könnte. Für Newcomer ist möglicherweise frühes HTML-Escaping ratsam; besser zu früh als später vergessen. – mario

+1

Angenommen, Sie möchten einige Textprotokolle erstellen. Dann müssten Sie Ihre Flucht rückgängig machen. Entfliehe stattdessen im letzten möglichen Moment, damit du weißt, dass es angemessen ist. –

Antwort

11

Wie bereits erwähnt, ist # 2 die richtige Antwort. Lass es "roh", bis du es brauchst und entkomme entsprechend.

Um zu erklären, warum (und ich wiederhole/zusammenfassen die anderen Beiträge), nehmen wir Szenario 1 zu seinem logischen Extrem.

Was passiert, wenn jemand "' OR 1=1 <other SQL injection> --" eingibt. Jetzt entscheiden Sie vielleicht, dass Sie, weil Sie SQL verwenden, für SQL kodieren sollten (vielleicht, weil Sie parametrisierte Anweisungen nicht verwendet haben). So, jetzt müssen Sie mischen (oder entscheiden) SQL & HTML-Codierung.

Plötzlich entscheidet Ihr Chef, dass er auch eine XML-Ausgabe möchte. Um nun Ihr Muster konsistent zu halten, müssen Sie auch dafür kodieren.

Nächste CSV - oh nein! Was ist, wenn im Text Anführungszeichen und Kommas stehen? Mehr entkommen!

Hey - wie wäre es mit einer netten interaktiven AJAX-Schnittstelle? Jetzt möchten Sie wahrscheinlich JSON zurück an den Browser senden, so dass jetzt {, [usw. alle berücksichtigt werden müssen. HILFE!!

Also speichern Sie die Daten wie angegeben (abhängig von Domain-Einschränkungen natürlich) und kodieren Sie passend zu Ihrem Ausgang zum Zeitpunkt, an dem Sie es benötigen. Ihre Ausgabe entspricht nicht Ihren Daten.

Ich hoffe, diese Antwort ist nicht zu bevormundend. Kredit an die anderen Befragten.

+0

Vielen Dank für die Zusammenfassung für mich und erklären, warum # 2 die beste Praxis sein wird. :) – Neel