html- , sql- injection; escape charakters

Alles, was PHP betrifft, kann hier besprochen werden.

html- , sql- injection; escape charakters

Postby codewappler » 23. February 2007 22:17

Hi

Kurzfassung:

Wie kann ich mich bei POST Daten in PHP gegen SQL Keywords, HTML Tags und Escape Zeichen schützen?

ausführliche Beschreibung:

Ich hab php Klassen für html input felder ("text", "dropdown", "checkbox") erstellt. Die Klassen finden immer anhand einer id die richtigen POST Variablen, die zu ihnen gehören und speicher und überprüfen diese auch.

Ich weiß wie ich überprüfe ob eine Variable ein bestimmter php Typ ist. Das mach ich so:

Code: Select all
if($_POST[<was immer>] == (string)(integer)$_POST[<was immer>])
return true;


Indem ich die Post <was immer> zweimal caste kann ich so feststellen, ob in der POST Variable ( die ja immer ein string ist ) ein gültiger integer wert enthalten ist.

So lässt sich gut "integer", "bool" und "float" bestimmen.

Aber das Problem ist jetzt, das meine Klassen so lange die falsche eingabe wider ins Formular schrieben bis sie der Benutzer zu einer richtigen korrigiert hat.

Nun dachte ich wenn der Benutzer einen den PHP datentyp string eingeben soll, dann kann er eigentlich nichts falsches eingeben. Das Problem ist jetzt nur wenn einmal ein "\" eingegeben wird werden es nachdem das formular nach einer falschen eingabe, in vieleicht einer anderen Klasse, erneut geladen wurde, also alle Post Variablen nocheinemal mit dem Formular zurückgeschickt wurden zwei "\\" und dann vier "\\\\" und dann acht "\\\\\\\\" usw... je oft das formular neu geladen wird.

Ausserdem wie kann ich mich gegen html Tags und SQL Keywords schützten?

Danke!
codewappler
 
Posts: 16
Joined: 12. January 2007 11:37

Postby Wiedmann » 23. February 2007 23:41

Das Problem ist jetzt nur wenn einmal ein "\" eingegeben wird werden es ... zwei "\\" und dann vier "\\\\" und dann acht "\\\\\\\\" usw... je oft das formular neu geladen wird.

Hört sich nach Magic Quotes an.

Ausserdem wie kann ich mich gegen html Tags und SQL Keywords schützten?

2x inwiefern?
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby codewappler » 24. February 2007 01:36

Nun ja, dass mir niemand über eine Post Variable in meine Datenbank Html Code einschleust oder diese mit SQL manipuliert.

ausserdem hab ich in php.ini schon folgendes: magic_quotes_gpc = On
codewappler
 
Posts: 16
Joined: 12. January 2007 11:37

Postby Wiedmann » 24. February 2007 02:01

Nun ja, dass mir niemand über eine Post Variable in meine Datenbank Html Code einschleust

Und was stört es MySQL, wenn du da HTML drin abspeicherst?

(Dein "Problem" lieht hier eher wo anders und kann auf verschiedene Art gelöst werden. je nach genauer Anforderung)

oder diese mit SQL manipuliert.

Ein Beispiel wie das passieren könnte, wenn deine Querys korrekt sind? (im Zusammenhang mit SQL Keywords und nicht mit anderen "Sonderzeichen")

ausserdem hab ich in php.ini schon folgendes: magic_quotes_gpc = On

Eben deswegen kommt es zu der Vermehrung der Backslashs...
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby codewappler » 24. February 2007 18:43

Also soll das Bedeuten wenn ich in meinen SQL Quries immer alle Wert schön in " stzte kann nichts passieren.
codewappler
 
Posts: 16
Joined: 12. January 2007 11:37

Postby Wiedmann » 24. February 2007 18:49

Sofern die Werte in Quotes gehören, und was MySQL angeht ja. Andere Werte können natürlich auch keine "SQL Keywords" enthalten, was du ja schon vorher geprüft hast (siehe dein Ursprungsposting).

Um entsprechende Sonderzeichen musst du dich natürlich kümmern. Und natürlich was passiert, wenn man das was in MySQL gespeichert ist wieder ausgibt.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Re: html- , sql- injection; escape charakters

Postby maxhb » 27. February 2007 20:30

Hi!
codewappler wrote:Wie kann ich mich bei POST Daten in PHP gegen SQL Keywords, HTML Tags und Escape Zeichen schützen?

SQL-Keywords: Hier ist eigentlich kein Schutz notwendig, wenn Du dafür sorgst, dass alle Werte entweder als Strings in " gekapselt werden oder in entsprechende Zahlen (Integer/Float) umgewandelt werden.
HTML-Tags: Kannst Du am einfachsten "entschärfen", wenn Du die entsprechenden Strings mit der PHP-Funktion htmlentities() bearbeitest.
Escape-Zeichen: Schau Dir mal die PHP-Funktion mysql_escape_string() an, die ist genau dafür gedacht.

CU
maxhb
User avatar
maxhb
 
Posts: 17
Joined: 18. January 2007 15:08
Location: Bremen

Re: html- , sql- injection; escape charakters

Postby Toothpick » 02. March 2007 14:17

maxhb wrote:Hi!
SQL-Keywords: Hier ist eigentlich kein Schutz notwendig, wenn Du dafür sorgst, dass alle Werte entweder als Strings in " gekapselt werden oder in entsprechende Zahlen (Integer/Float) umgewandelt werden.


sql injection ist sehr wohl möglich.
Die Funktion Mysql_real_escape_string() schütz vor den gängigsten Angriffen.

injections kann man übrigens sehr gut vermeiden, indem man die eigens verwendeten hochkommata oder eben doppelte Hochkommata (Gänsefüßchen) aus allen Formulareingaben ausfiltert, besonders, wenn man dem Benutzer die Möglichkeit geben will Links zu posten.
Toothpick
 
Posts: 9
Joined: 02. March 2007 12:05

Re: html- , sql- injection; escape charakters

Postby maxhb » 02. March 2007 17:19

Toothpick wrote:sql injection ist sehr wohl möglich.
Die Funktion Mysql_real_escape_string() schütz vor den gängigsten Angriffen.

Der Hinweis zu "SQL-Keywords" und "Escape-Zeichen" ist natürlich im Zusammenspiel zu verstehen.

CU
maxhb
User avatar
maxhb
 
Posts: 17
Joined: 18. January 2007 15:08
Location: Bremen


Return to PHP

Who is online

Users browsing this forum: No registered users and 3 guests