Tach!
Auf das man es an einer Stelle vergisst... Jede Eingabe von einem Benutzer ist potentiell gefährlich, darum muss man das ja machen.
Das ist der große Irrtum, der leider immer wieder so gepredigt wird und dann zu falschen Schlüssen führt. Die Eingabedaten sind nicht gefährlich, sie explodieren nicht einfach so, oder machen von sich aus irgendwelche gefährlichen Dinge. Es sind die Ausgabedaten, bei denen vergessen wurde, sie für den Ausgabekontext zu behandeln. Und es ist dabei völlig unerheblich, ob die Daten aus einer Eingabe oder aus einer anderen Quelle stammen - wenn sie Sonderzeichen enthalten können, müssen diese maskiert werden, oder was auch immer der aktuelle Kontext vorsieht.
Und warum dann nicht Zentral für alles was ankommt? Naja wenn es gesagt wird, dann setzt der Leie das so um.
Deswegen ist das ja auch nicht gut, wenn man das dem Laien immer so falsch erklärt. In deinem Beispiel gibst du die Daten direkt in Richtung SQL aus. Abgesehen davon, dass man mit Prepared Statements keine Behandlung mehr braucht ... stell dir mal vor, du nimmst die Daten und prüfst sie erst auf fachliche Richtigkeit. Du stellst nun fest, dass da Fehler drin sind, die der Anwender erstmal beseitigen muss, bevor sie gespeichert werden können. Also baust du ein Affenformular, das die Daten solange wieder in ein HTML-Formular schreibt und dem Anwender zurückgibt, bis sie korrekt sind. Solange gilt als Kontext HTML und erst dann gilt der Kontext SQL. Es nützt dir also nichts, beziehungsweise macht mehr Probleme als es löst, wenn du gleich am Eingang die SQL-Behandlung vornimmst. Das fügt zum Beispiel Backslashes vor Anführungszeichen, obwohl das in HTML " sein muss (nicht immer, aber in Attributwerten, und anderswo schadet es auch nicht).
Das Argument, man dürfe die Behandlung nicht vergessen ist insoweit richtig. Aber das muss man sich für die Ausgabe angewöhnen. "Jegliche Daten müssen dem Ausgabekontext entsprechend angepasst werden." Das ist der einfache Grundsatz. Der Teufel liegt dann jedoch mitunter im Detail, weil gelegentlich mehrere Kontext geschachtelt werden müssen. Daten, die in einer URL transportiert werden sollen, und die ihrerseite im HTML-Code steht, ist so ein geschtelter Fall. Das braucht zwei Behandlungen. Die Daten brauchen eine URL-gerechte Umformung, und die URL selbst muss HTML-Konform sein. Wir haben da im Wiki einen Artikel zum Kontextwechsel, der recht viele der im Webumfeld vorkommenden Kontexte beleuchtet.
dedlfix.