Hallo,
von SQL-Injections gehört hab ich schon vor Jahren mal, in der Zwischenzeit aber nie was allzu sicherheitskritisches programmiert. Nun in letzter Zeit aber doch mal ein Login, die von mehreren Leuten genutzt werden, also hab ich mir mal angeschaut, was denn rauskommt, wenn ich z.B. mal ein "%"-Zeichen in ein Feld mit einbaue, das direkt so in der MySQL-WHERE-Klausel abgefragt wird:
Ich bekomme daraufhin die Servermeldung:
_____________________________________________________________________
Zugriff nicht möglich!
Der Server ist derzeit nicht in der Lage die Anfrage zu bearbeiten. Entweder ist der Server derzeit überlastet oder wegen Wartungsarbeiten nicht verfügbar. Bitte versuchen Sie es später wieder.
Sofern Sie dies für eine Fehlfunktion des Servers halten, informieren Sie bitte den Webmaster hierüber.
Error 503
_____________________________________________________________________
Geb ich eine Abfrageerweiterung mit Hochkommata ein, werden diese bei der Post-Übergabe gequotet. Dadurch scheint es so ohne Weiteres also auch nicht mehr möglich, was einzuschleußen.
Sobald mal keine Hochkommata nötig sind, z.B. bei Integervergleichen, schauts wohl wieder anders aus:
z.B. mal auf die natürlich gezielt zu Testzwecken gestaltete Klausel
"WHERE a="
hin den String
"1; DROP fuchsbau"
eingeben.
Sofern eine Tabelle fuchsbau besteht, sollte sie danach nicht mehr bestehen.
Meine Fragen dazu wären nun konkret:
1. Was steckt hinter dem Fehler 503 beim Eingeben des Prozentzeichens, den ich nur dann kriege, nicht jedoch, wenn ich die richtigen Daten (Name und Passwort) eingebe?
Dürfen Übergabeparameter einfach kein "%" enthalten?
2. Gibt es evtl. Standard-Kniffe (Funktions-Sammlung), die jegliche Einschleußattacken in jeglichen SQL-Dialekten außer Gefecht setzt?
(Hab ja keine Ahnung, was es sonst noch alles für Tricks gibt.
Hab mir z.B. mal Artikel wie diesen durchgelesen:
http://de.wikipedia.org/wiki/SQL_Injection)
Abdgedeckt sein sollten eben "%"-Eingaben, wenns nicht eh der Server schon blockiert, Hochkommata-Erweiterungen, falls solche per stripslashes() vom Code aus erlaubt werden, weitere angehängte SQL-Befehle nach einem Strichpunkt, besonders gefährlich scheinbar innerhalb von Integer-Abfragen, usw.
Gruß Michi