| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
severus
Anmeldedatum: 15.11.2007 Beiträge: 3
|
Verfasst am: 27.02.2008, 11:54 Titel: SQL-Injection? |
|
|
Ich beschäftige mich im Moment mit Webdesign und hab dabei gelesen, dass ich mich vor SQL-Injections schützen muss... Wie erkenne ich denn so eine Injection und was kann amn da machen?
Grüße, severus |
|
| Nach oben |
|
 |
derhoesel

Anmeldedatum: 20.04.2007 Beiträge: 101
|
Verfasst am: 27.02.2008, 12:17 Titel: |
|
|
Hallo erstmal und herzlich willkommen im Forum.
Unter einer SQL-Injection versteht man das ausführen von fremdem Code, der ohne dein Wissen, aber durch ein Script von dir, das z.B. eigentlich Informationen aus einer Datenbank auslesen soll, in deiner Datenbank ausgeführt wird.
Du schreibst, du beschäftigst dich mit Webdesign... Meinst du damit reines HTML/CSS oder programmierst du was dynamisches mit PHP/MySQL? Wenn du nämlich keine Datenbank verwendest, brauchst du auch keine Angst vor SQL-Injections zu haben.
Das Stichwort zum Schutz vor SQL-Injections lautet (bei PHP/MySQL) mysql_real_escape_string(). _________________
Mein PC bei PCadept  |
|
| Nach oben |
|
 |
severus
Anmeldedatum: 15.11.2007 Beiträge: 3
|
Verfasst am: 27.02.2008, 13:17 Titel: |
|
|
Danke für die schnelle Antwort
Ich meinte Webprogrammierer, also schon mit PHP/MySQL... Bin aber eben totaler anfänger.
Also wenn ich das mit mysql_real_escape_string richtig verstanden habe, muss ich das auf die Daten, die ich in die Datenbank eintrage anwenden. Aber wie mach ich das genau? muss ich das auf jede variable anwenden oder einfach auf die ganze anweisung?
Grüße, severus |
|
| Nach oben |
|
 |
derhoesel

Anmeldedatum: 20.04.2007 Beiträge: 101
|
Verfasst am: 27.02.2008, 14:06 Titel: |
|
|
Ok, wollte ich nur wissen.
Also: du musst die Funktion auf jede übergebene Variable anwenden, die was mit der Datenbank zu tun hat. Den Befehl auf die ganze Abfrage anzuwenden ist ne ganz schlechte Idee, schließlich maskiert er ja Anweisungen, so dass sie nicht ausgeführt werden...
Ein kleines Beispiel (simple Passwortabfrage - gegeben eine Tabelle benutzer mit Feldern username und passwort)
Der Standard-Abfrage, um zu schauen, ob ein Nutzer da ist, auf den die übergebenen Werte zutreffen - ohne mysql_real_escape_string():
| Code: |
$result = mysql_query("SELECT * FROM benutzer WHERE username = "'.$username.'" AND passwort = '".$passwort."'");
|
Bin ich jetzt ein böser Hacker, kann ich z.B. die Variablen mit
belegen, wobei immer true rauskommt. => schon bin ich eingeloggt.
Die korrekte Abfrage muss also
| Code: |
$result = mysql_query("SELECT * FROM benutzer WHERE username = "'.mysql_real_escape_string($username).'" AND passwort = '".mysql_real_escape_string($passwort)."'");
|
lauten, da so keine SQL-Anweisungen in den Variablen an die Datenbank übergeben werden.
Das Ganze ist in den Kommentaren auf der von mir verlinkten Seite auch recht anschaulich erklärt. _________________
Mein PC bei PCadept  |
|
| Nach oben |
|
 |
|