Hi!
Ich habe mich vielleicht nicht klar genug ausgedrückt, eigentlich wollte ich von euch wissen wie man Injections in der Eingabe verhindern kann.
Das zeigt, dass du das Prinzip immer noch nicht verstanden hast. Vielleicht hilft dir ja der Kontextwechsel-Artikel, besonders der Anfang. Es ist nicht die Eingabe, die problematisch ist, sondern das Zusammenbauen von Ausgabe-Code und Daten. Dabei spielt es nur eine geringe Rolle, woher die Daten stammen.
Daher bin ich davon ausgegangen das die mysql_real_escape_string Funktion nur einen kleinen teil dazu beiträgt aber nicht ausreichend ist und nur deswegen habe ich mich festgebissen an das Wörtchen Prüfung! Damit meinte ich ob es evtl. weitere Techniken gibt um SQL Injection zu verhindern.
Wenn du das Prinzip verstanden hast, wirst du die Rolle von Escaping und der genannten Funktion zuordnen können. Wenn von Prüfung die Rede ist, dann ist das ind er Tat missverständlich, weil nicht korrekt, oder besser: nicht für alle Anwendungsfälle korrekt. Prüfen kann man nur dann, wenn der erlaubte Wertebereich genau vorgegeben und überschaubar klein ist.
Das ist doch *total* egal, auf welche Weise der Client den Request produziert hat. Es ist nur interessant, *welche* Werte er übergibt. Was Du für Werte erwartest, hat einzig und allein mit dem Zweck und der Logik Deines Skriptes zu tun. Diese ganzen HTMl- und SQL-Aspekte spielen dabei überhaupt keine Rolle.
Wenn ich einen Wert ohne Zeilenumbruch erwarte dann ist das meinem Erachten nach nicht total egal ob darin nachher doch ein Wert mit Umbruch gesendet wurde!
Es gehört zur Geschäftslogik und der Prüfung auf erlaubte Werte. Aus sicherheitstechnischer Sicht ist eine Prüfung nicht notwendig, denn da zählt nur das korrekte Escapen. Wenn deine Anwendung keinen Zeilenumbruch akzeptiert, und du außerdem die Eingabe für normale Anwender über ein einzeiliges Eingabefeld stattfindet, dann kann ein enthaltener Zeilenumbruch ein Hinweis auf Missbrauch sein. Die Sicherheit kann allerdings auch über Escaping gewährleistet sein, wenn das Ausgabemedium das vorsieht (bei E-Mail-Adressen beispielsweise nicht). Missbrauch kann man aber auch noch zur Genüge mit erlaubten Werten treiben (ungültige aber syntaktisch korrekte E-Mail, sinnloser Text als Gästebucheingabe, etc.).
Was ich vorhabe wurde schon erläutert, ich möchte SQL Injections weitestgehend verhindern.
Der Wunsch ist so formuliert vergleichbar mit weitestgehend nicht schwanger werden zu wollen. :-)
Lo!