SQL-Injektion verhindern
am 05.02.2005 01:38:58 von Erik Griffin
Hallo!
Ich habe mal irgendwo gelesen, dass es eine recht einfache
Möglichkeit gibt SQL-Injektions zu verhindern. Bisher habe
ich Werte von Formularen immer folgendermaßen in Tabellen
eingefügt. Ich habe mir eine Query zusammengebastelt und
diese abgeschickt:
query = "INSERT INTO Customer (Anrede) VALUES ('".$WERT."')";
Die Variable $WERT ist das was im Formular eingegeben wurde.
Hier wäre ja nun die Möglichkeit einer SQL-Injektion gegeben.
Irgendwie gibt es doch eine Möglichkeit statt $WERT an
dieser Stelle Platzhalter zu verwenden und dann die Werte
hinter dem Funktionsaufruf zu übergeben.
Das ganze soll unter mySQL laufen. Hat jemand ein Tip bzw.
ein kurzes Beispiel oder einen hilfreichen Link?
mfg
Erik
Re: SQL-Injektion verhindern
am 05.02.2005 01:57:09 von Hartmut Holzgraefe
Erik Griffin wrote:
> Hallo!
>=20
> Ich habe mal irgendwo gelesen, dass es eine recht einfache
> Möglichkeit gibt SQL-Injektions zu verhindern.=20
> ...
> Das ganze soll unter mySQL laufen. Hat jemand ein Tip bzw.
> ein kurzes Beispiel oder einen hilfreichen Link?
http://php.net/mysql_real_escape
--=20
Hartmut Holzgraefe, Senior Support Engineer .
MySQL AB, www.mysql.com
Are you MySQL certified? www.mysql.com/certification
Re: SQL-Injektion verhindern
am 05.02.2005 01:57:44 von Niels Braczek
Erik Griffin <1f4e5381573d4a9c00e0b61302a4167f@nurfuerspam.de> schrieb:
> Ich habe mal irgendwo gelesen, dass es eine recht einfache
> Möglichkeit gibt SQL-Injektions zu verhindern.
> [...]
> Das ganze soll unter mySQL laufen. Hat jemand ein Tip bzw.
> ein kurzes Beispiel oder einen hilfreichen Link?
http://de2.php.net/manual/en/function.mysql-real-escape-stri ng.php
MfG
Niels
--
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es
eine Interpunktionsnorm. Wenn du deine Programme genauso schlampig
schreibst, solltest du es lieber bleiben lassen. [Niels Braczek]
Re: SQL-Injektion verhindern
am 05.02.2005 01:59:06 von Erik Griffin
* Erik Griffin schrieb:
[...]
Hab nochmal nachgeschaut. Jagd Ihr die Werte einfach alle
vorher durch die Methode real_escape_string durch und gut
ist? Ist das ausreichender Schutz vor SQL-Injektions?
Eine Lösung mit Platzhalter, die ungefährt wie folgt
aussieht, würde ich irgendwie besser finden:
query("INSERT INTO ? (Anrede) VALUES(?)", $TABLE, $WERT);
Gibt es da evtl. entsprechende Möglichkeiten unter PHP oder
mySQL? Kann man bei mySQL eigentlich die Funktionsaufrufe
(INSERT, DELETE, usw. usf.) und die Daten getrennt
voneinander übermitteln?
mfg
Erik
Re: SQL-Injektion verhindern
am 05.02.2005 04:07:26 von Hartmut Holzgraefe
Erik Griffin wrote:
> Kann man bei mySQL eigentlich die Funktionsaufrufe
> (INSERT, DELETE, usw. usf.) und die Daten getrennt
> voneinander übermitteln?
PHP 5 und MySQL >=3D 4.1 vorausgesetzt ja:
http://php.net/mysqli-prepare
--=20
Hartmut Holzgraefe, Senior Support Engineer .
MySQL AB, www.mysql.com
Are you MySQL certified? www.mysql.com/certification
Re: SQL-Injektion verhindern
am 05.02.2005 13:30:57 von Axel Schwenke
Erik Griffin <1f4e5381573d4a9c00e0b61302a4167f@nurfuerspam.de> wrote:
> Eine Lösung mit Platzhalter, die ungefährt wie folgt
> aussieht, würde ich irgendwie besser finden:
>
> query("INSERT INTO ? (Anrede) VALUES(?)", $TABLE, $WERT);
Korrekt heiß das nicht "eine Lösung mit Platzhalter", sondern
"prepared Statements". Und ja, das kannst du auch machen.
Vorausgesetzt du verwendest MySQL 4.1 und die entsprechenden
Funktionen der 'mysqli' PHP-Erweiterung.
ABER
Auch abseits von SQL-Injection kann ein Angreifer jede Menge
Blödsinn anstellen, wenn du den übergebenen Daten aus Formularen
unbesehen glaubst. Eine Validierung der Eingabeparameter ist
deswegen *immer* empfehlenswert.
XL
Re: SQL-Injektion verhindern
am 07.02.2005 07:04:28 von Fabian Schladitz
Erik Griffin schrieb:
> Hab nochmal nachgeschaut. Jagd Ihr die Werte einfach alle
> vorher durch die Methode real_escape_string durch und gut
> ist? Ist das ausreichender Schutz vor SQL-Injektions?
Du möchtest mehr über Sicherheit wissen, nehme ich an. Schau doch mal in
der FAQ nach:
12.11. Prüfe importierte Parameter. Traue niemandem
http://www.php-faq.de/q/q-sicherheit-parameter.html
12.1. Wie unterscheide ich böse Variablen von guten?
http://www.php-faq.de/q/q-security-variablen.html
--
HTH,
Fabian