Hi,
Ok, bitte noch einmal langsam. Ich möchte das ganze jetzt mal komplett richtig verstehen.
gerne.
Der Kontext ist das SQL-Statment. Der Wert, den ich in diesen Kontext bringen will, ist in dem von Dir gewählten Beispiel "bar".
Nein, er lautet "bar'; INSERT INTO ...".[2]
Nun müßte ich also alle " und ' in diesem String mit \ maskieren, oder wie?
Alle Zeichen, die in dem Kontext eine Sonderfunktion besitzen. Dies sind hier mindestens "'" und "". In aller Regel sollte die Schnittstelle, die Du verwendest, eine entsprechende Funktion zur Maskierung bereit stellen; es ist nur selten weise, sie sich selbst herzustellen. Verwende die vorliegende Funktion, dann ist die Maskierung auch so, wie sie sein muss (s. Vinzenz' Posting).
SELECT ... FROM ... WHERE foo='bar'; INSERT INTO ...' [1]
^
Wieso wird an dieser Stelle maskiert?
Das ist mir nicht ganz klar.
[2] Jetzt klarer? :-)
Andererseits heißt es, dass HTML-Code, der auf "legalem" Weg von außen in Deine Datenbank gelangt, bei einer entsprechenden Ausgabe menschenlesbar auf der Seite steht, anstatt als HTML-Code interpretiert zu werden...
Nun das wäre für mich kein Nachteil. Trotzdem die Frage: wie würde ich erreichen doch wieder interpretierbaren Code zu erhalten, wenn ich es wollte?
Auf die Maskierung in diesem Fall verzichten - bzw. genauer gesagt den Kontext anders definieren ("HTML-Dokument" anstatt "HTML-Code"), so dass die Maskierung ein anderes Ergebnis liefert (nämlich sind Ausgabe und Eingabe identisch). Allerdings ist das doch ein Nachteil, denn genau hierbei findet die Ausführung des eigentlichen Schadcodes statt.
Cheatah
X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
X-Will-Answer-Email: No
X-Please-Search-Archive-First: Absolutely Yes