Tom: Zeilenumbruch in Gästebuch

Beitrag lesen

Hello,

Wolltest Du sagen, dass Benutzereingaben grundsätzlich in den vorgesehenen Zieltyp umgewandelt werden sollten und man meckert, wenn dies nicht funktioniert?

Wer ist "man" in dem Fall? Der Zieltyp wäre sozusagen "Stringliteral für SQL-Statments". Ein

Hallo 'Welt'!

Da bringst Du jetzt selber mehrere Dinge durcheinander.
http://forum.de.selfhtml.org/archiv/2011/1/t202717/#m1369714

Also erstmal sollte im Script, typischerweise in einem Elemetn von $_GET oder $_POST kein Literal mehr stehen, sondern ein Wert. PHP überträgt hier grundsätzlich nur den Datentyp "String".

Die Wandlung (Kontextbehandlung) für die Verwendung im Script hat bereits stattgefunden. Dennoch kann die Zeichenkette nun noch Zeichen enthalten, die nicht hineingehören (Stichwort: Magic Quotes).

Außerdem muss nun geprüft werden, ob der vorgesehene Zieltyp aus dem String-Wert ohne Fehler erzeugt werden kann. Wie genau hier "Fehler" zu definieren ist, hängt sicherlich auch vom Geschick der Umwandlungsfunktion ab.

Beispiel:
Aus dem String "08.02.1969" den String "19580208" zu machen, dürfte noch recht einfach sein.
Aus dem String "08.2.1969" den String "19580208" zu machen, ist schon eine Stufe schwieriger.
Aus dem String "08.2.69" ebenfalls den String "19580208" zu machen, erfordert schon Zusatzinformationen.

Mit dem String "08,2,69" immer noch zum gewünschtren Erfolg zu kommen, ist schon ein wenig Überlegung wert.

Sinn dieser Umwandlungsstufe (von "Filter" bis "Sanitize") liegt sicherlich darin, dem Benutzer das Eingaben von Daten zu erleichtern und trotzdem plausible Daten zu erhalten. In dieser Stufe ist das Ziel ein vereinheitlichtes ROHDATEN-Format.

Ob diese Daten dann später in eine Datenbank geschrieben werden, spielt HIER noch keine Rolle.

(bei in '' eingefassten Strings) ist nur dann gemäß meiner Intention und aus Sicht des DBMS unverfälscht, wenn ich die Anführungszeichen um Welt maskiere. Ansonsten liest das DBMS nur Hallo und ein Leerzeichen, was nicht mehr der Benutzereingabe entspricht, also (unbeabsichtigt sicherlich) verändert wurde.

Eben diese Behandlung (Escaping) ist erst der nächste Schritt. Wenn ich die Datenbank über Blockpuffer mit Daten fülle, muss ich mit dem String gar nichts mehr nachen, wenn das DBMS den Datentyp String unterstützt (was normal wäre). Wenn ich eine Zahl übergeben will, muss ich den die Zahl repräsentierenden String vorher noch in ein gültiges Zahlenformat umwandeln.

Wenn ich für die Übergabe eine Textschnittstelle benutzte, muss ich den String escpapen, mit dem die Zahl repräsentierenden String gar nichts mehr machen.

Erst bei der Übergabe an die nächste (Verarbeitungs-)Stufe (z.B. die Datenhaltung) müssen dann die berühmten Kontextwechsel beachtet werden...

Eben. Wenn Gunnar die Injections anspricht, meint er auch diesen Vorgang, nicht nur die vorherige Verarbeitung im Script.

Aber wir sollten nicht zwei Verarbeitungsschritte in einem zu Brei verarbeiten.

Liebe Grüße aus dem schönen Oberharz

Tom vom Berg

--
 ☻_
/▌
/ \ Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de