Hallo,
da ich unter Anderem hin und wieder auch Web-Anwendungen schreibe wollte ich mir heute mal das Thema "SQL Injection" ganz genau ansehen. Das es auf einfach Seiten funktioniert ist logisch. Hierfür habe ich eigens ein paar Seiten gebaut, in welche ich dann Code eingeschleust habe.
Nun sind aber zwei Fragen aufgekommen: (Zur Info: Ich arbeit mit XAMPP)
1. Selbst wenn der Datenbankuser sagen wir DELETE-Recht hat und er seinen Code hinten an ein SELECT-Statement anhängt,wird dies von mysql_query (PHP) anscheinend nicht ausgeführt.
Das unterstrichene ist Userinput. Hiervon scheint keine Gefahr auszugehen, da diese Art von Statements wohl beim connect erst aktiviert werden müsste (wenn ich das dem Handbuch richtig entnommen habe).
2. gibt es ja noch die schöne funktion mysql_real_escape_string()
Bei INT-Feldern funktioniert wie oben sichtbar eine Injection immer noch recht einfach (zumindest das select. Delete geht eben nicht). Doch lässt sich mysql_real_escape_string() nicht auch irgendwie umgehen bzw. durch eingebaute kommentare etc. aushebeln (hierzu habe ich mal einen trick mit der zeichenkodierung gefunden, wodurch man sich glaube ich die slashes in die query bauen konnte).
Wäre super wenn hier jemand ein bisschen Literatur weiß und die mir nennen kann. Ist ein echt interessantes Thema, da man als Entwickler zwar selbst ein paar Schwachstellen kennt, aber man doch manchmal im Bezug auf die Sicherheit ein recht mulmiges Gefühl hat.
Schonmal Danke und Gruß
da ich unter Anderem hin und wieder auch Web-Anwendungen schreibe wollte ich mir heute mal das Thema "SQL Injection" ganz genau ansehen. Das es auf einfach Seiten funktioniert ist logisch. Hierfür habe ich eigens ein paar Seiten gebaut, in welche ich dann Code eingeschleust habe.
Nun sind aber zwei Fragen aufgekommen: (Zur Info: Ich arbeit mit XAMPP)
1. Selbst wenn der Datenbankuser sagen wir DELETE-Recht hat und er seinen Code hinten an ein SELECT-Statement anhängt,wird dies von mysql_query (PHP) anscheinend nicht ausgeführt.
Code:
SELECT * FROM test WHERE id=[B][U]1 or 3=3; DELETE FROM test[/U][/B]
2. gibt es ja noch die schöne funktion mysql_real_escape_string()
Bei INT-Feldern funktioniert wie oben sichtbar eine Injection immer noch recht einfach (zumindest das select. Delete geht eben nicht). Doch lässt sich mysql_real_escape_string() nicht auch irgendwie umgehen bzw. durch eingebaute kommentare etc. aushebeln (hierzu habe ich mal einen trick mit der zeichenkodierung gefunden, wodurch man sich glaube ich die slashes in die query bauen konnte).
Wäre super wenn hier jemand ein bisschen Literatur weiß und die mir nennen kann. Ist ein echt interessantes Thema, da man als Entwickler zwar selbst ein paar Schwachstellen kennt, aber man doch manchmal im Bezug auf die Sicherheit ein recht mulmiges Gefühl hat.
Schonmal Danke und Gruß