Hi dedlfix,
Offene Ohren finden sie schon, aber die Argumente müssen mich überzeugen.
Ich gebe zu, mit wirklichen Argumenten habe ich auch gespart. Dann werde ich mir nun auch die Zeit nehmen, das nachzuholen.
Vorneweg eine Anmerkung: Der eine oder andere mag das Folgende als ziemlich pedantisch ansehen. Sei's drum - ich tu das nicht. Ich finde den Artikel inhaltlich gut, er zeigt im wesentlichen die meisten kritischen Situation im Hinblick auf Zeichenmaskierung gut auf und ist daher eine gute Uebersicht fuer halbwegs fortgeschrittene (was immer das heisst) PHP-Programmierer. Er ist aber formal sehr unpraezise, so dass ich glaube, dass Anfaenger, die kein Grundverstaendnis fuer die Problematik mitbringen, bei der Lektuere des Artikels grosse Schwierigkeiten haben werden, dieses Verstaendnis zu erlangen. Nicht zuletzt schreibe ich das im Hinblick auf diesen Thread, indem ein Anfaenger zwar die formale Funktionsweise verschiedener Escape-Funktionen kannte, aber keinerlei Verstaendnis fuer ihren Einsatzzweck hatte.
---------------------------------------------------------------------
Bleibt die Frage: "Was ist ein Kontext?" Und diese Frage beantwortet der Artikel *nicht*.
Wenn du nochmal aufmerksam die Abschnitte "Einleitung" und "Programmcode und Daten" liest, bleibst du dann bei deiner Meinung? ;-)
Ja. Ich versuche im folgenden mal zu verstehen, was ein Kontext ist.
[...] und besonders der Teil zwischen dem zweiten und dritten Beispiel-Kasten sollte die Begriffe Kontext und Kontextwechsel erläutern.
Dem hier angesprochenen Abschnitt entnehme ich, dass ein Kontext (z.B.) ein Teil eines PHP-Programmcodes ist. Etwa ein Teil, der aus einem Stringliteral besteht, oder ein Teil, der aus "Code" besteht. Auszug:
Das Anführungszeichen hat bereits die Bedeutung des Kontextwechsels zwischen Code und Daten.
Ok, das nehme ich erstmal so hin. Aber spaetestens in dem Abschnitt ueber "geschachtelte" Kontextwechsel wird manches damit etwas problematisch:
Um den String jedoch beispielsweise in einem SQL-basierenden Datenbanksystem abzulegen, muss er in ein SQL-Statement eingebettet werden [...]
Nein, das ist *falsch*! Um den String in einem SQL-basierenden Datenbanksystem abzulegen, muss ein (ggf.) *anderer* String, naemlich sein SQL-Literal, in ein SQL-Statement eingebettet werden. Warum Du Dich hartnaeckig weigerst, von Literalen zu sprechen, kann ich nicht nachvollziehen, denn darin steckt des Pudels ganzer Kern.
> $sql = "SELECT feldliste FROM tabelle WHERE feld='$variable'";
In diesem Beispiel kommen zwei geschachtelte Kontextwechsel vor
Kann ich (im Hinblick auf obige Erklaerung von "Kontextwechsel") nicht nachvollziehen. Hier steht PHP-Code mit einem einzigen Kontextwechsel: "Code zu Daten". Und wenn es doch zwei sind, wo ist der zweite Kontextwechsel (echte Frage!)? Ist er da, wo das spaetere SQL-Statement anfaengt (also am Beginn des PHP-Strings) oder da, wo die "Daten" desselben anfangen, also beim ersten "'". Ich wuerde letzteres vermuten, aber spaeter schreibst Du etwas von "SQL-Kontext". Was ist das? Das ist nicht konsistent mit den obigen Kontexten "Code" und "Daten" innerhalb von PHP-Skripten. Viel eher wuerde ich wiederum Code- und Daten-Kontext (innerhalb von SQL-Statements) erwarten, als einen SQL-Kontext.
Wenn ich nun weiterlese, stolpere ich u.a. ueber folgende Saetze.
Im Browser angezeigt hat dieser bereits den HTML-Kontext interpretiert.
Ein Kontext ist Quelltext?
Der Kontext, in dem dieser Code steht, ist PHP.
Ein Kontext ist eine Sprache?
AJAX ist eine Technik, die im Browser aus dem Kontext JavaScript heraus ausgeführt wird.
Ok, ein Kontext ist u.U. eine Sprache (s.o.). Aber was um Himmels Willen bedeutet es, dass daraus eine Technik ausgefuehrt wird?
Notiert man die beiden Kontexte (HTML und JavaScript) in einzelne Anweisungen [...]
Was???
Mein Fazit: Ich weiss nicht, was ein Kontext ist. Aus all diesem ein Grundverstaendnis fuer das Thema zu erlangen, wuerde mir ausgesprochen schwer fallen.
Wenn man die Bedeutung von Wort X nicht kennt, so war es früher durchaus üblich, in einem Nachschlagewerk nachzusehen.
Wenn ein Fach(!)artikel einen Fach(!)begriff benutzt, dann war es frueher wie heute ueblich, dass er eine Definition oder einen Verweis auf eine Quelle einer Definition liefert. Der Grund ist der, dass ein (nicht fachspezifisches) Nachschlagewerk diese im allgemeinen nicht parat hat.
Ich meine das uebrigens ernst - ich *weiss nicht*, was "Kontext" (in diesem Kontext ;-)) bedeutet. Und ich weiss auch nicht, warum dieser Begriff so eine zentrale Rolle spielt. Wenn man in den jeweils angesprochenen Beispielen mal hinschreiben wuerde, was wirklich passiert, d.h. die Begriffe Maskierung und Literal exzessiv und *praezise* benutzte, dann braeuchte man den Begriff Kontext wahrscheinlich ueberhaupt nicht. Dass er hier im Forum ein Modewort ist, aendert daran nichts. Und wenn er doch so wesentlich gebraucht wird, dann muss die Frage gestattet sein, was er bedeutet.
So, jetzt hab ich ganz schoen ausgeholt - dafuer jetzt noch was anderes: Ich habe selber aus dem Aritkel was lernen koennen, und zwar im Hinblick auf die Unterschiede der Notwendigkeit von Maskierungen von JavaScript-Code in <script>-Elementen und in Eventhandlern. Dafuer also "Vielen Dank" an Dich von einem Leser. :-)
Viele Gruesse,
der Bademeister