Sicherheit testen
mod_i
- datenbank
0 romy0 ralf0 Sven Rautenberg
Hallo,
ich hab einen kleinen Shop geschrieben mit PHP und MySQL und möchte ihn nun auf die Sicherheit prüfen. Ich habe mal gelesen das es möglich ist, mittels Hochkomma angaben bzw. böswilligen SQLcode ( DELETE; DROP usw ) per URL zu übermitteln. Dies möchte ich natürlich vermeiden!
Die Frage die sich mir jetzt stellt ist wie kann ich meine DB testen bzw. wie über mittel ich den SQLcode per URL?
So:?
www.bla.de?DELETE FROM warenkorb WHERE UID='$PHPSESSID'
Grüss mod_i
Hi,
Die Frage die sich mir jetzt stellt ist wie kann ich meine DB testen bzw. wie über mittel ich den SQLcode per URL?
Angreifbar ist dein System nur, wenn Du Daten aus Eingabefeldern übermittelst und diese dann direkt in die DB übernimmst, anstatt zu prüfen.
Um diesem Dilemma aus dem Weg zu gehen, escape ich alle " und ' per Hand und entferne zusätzlich Wörter wie drop, update usw.
ciao
romy
Hi,
ich würde Dir empfehlen jeden SQL-String den Du an die DB schickst zu prüfen.
Die Abfrage per SQL, wie Du sie beschreibst, wäre meines Erachtens nur innerhalb von POST oder GET Variablen möglich, also wenn z.B. im Namens feld ein SQL string eingegeben wird.
Mit PHP kann man das so verhindern:
$sql="SELECT * FROM tabelle WHERE name='".mysql_escape_string($_POST["name"])."';";
Der Befehl mysql_escape_string maskiert einen String und macht ihn damit als SQL-Sequenz unbrauchbar.
Auch solltest Du bei PHP immer mit $_POST arbeiten, damit keine Variablen über die URL gegeben werden können.
Gruß
Ralf
Moin!
Die Frage die sich mir jetzt stellt ist wie kann ich meine DB testen bzw. wie über mittel ich den SQLcode per URL?
Gar nicht am besten. SQL gehört einfach nicht in die URL. Da kann man viel zuviel Blödsinn mit machen!
Üblichwerweise willst du ja einen von mehreren _definierten_ Aktionen auslösen. Verwende also entsprechend nur _definierte_ Aktionsschlüsselwörter in der URL:
?action=warenkorb
?action=neuprodukt
?action=prodloesch
?action=bestellen
Nur diese _definierten_ Aktionen dürfen in deinem Shop möglich sein. Und jede Aktion ist mit einem _fest definierten_ SQL-String verbunden, der in diesem Fall aufgerufen wird.
Dieser String wird sicherlich durch Angaben des Besuchers ergänzt. Beispielsweise muß ja irgendwie bekannt gemacht werden, welches und wieviel von einem Produkt er haben möchte. Diese Userangaben sind aber zwingend zu _validieren_. Wenn eine Produktanzahl anzugeben ist, dürfen in den übermittelten Daten eben nur Zahlen stehen, möglicherweise sogar nur Zahlen zwischen 0 und 999 (wer will schon eine Million Seifenstücke bestellen?).
Siehe dazu auch (auch für nicht-PHP-Verwender interessant):
http://www.dclp-faq.de/q/q-sicherheit-parameter.html
http://www.dclp-faq.de/q/q-security-variablen.html
- Sven Rautenberg