• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

SQL Injection == Gefahr

freakXHTML

Mitglied
Hallo zusammen,
da ic mich selbst mit MySQL Datenbanken befasse, möchte ich natürlich, dass meine Seite sicher ist. Deswegen habe ich mich mal zur SQL Injection informiert und folgendes Video gefunden:

YouTube - SQL-Injection - Einführung - Teil 1

Der böse Mensch gibt admin' 1=1 ein. Ich frage mich, ob das was bringt bzw. wie ich mich dagegen schützen kann. Was macht dieser Befehl? Das ist doch gar kein SQL. Was soll dieses Hochkommata?

Wie kann ich mich dagegen schützen, wenn das gar kein SQL ist? Könnt ihr mir sagen, was der da macht und was ich dagegen machen kann. Das sieht nämlich erschreckend einfach aus.

Vielen Dank
lg, freakXHTML
 
Das macht bind_param() für die das escaped alle evtl. boshaften Charakter, genau wie mysqli_real_escape_string().
 
Eigentlich ist das schon SQL-Code.
Beispiel, der PHP-Code für einen Login beinhaltet dieses SQL-Statement:
PHP:
...
$sql = "SELECT * FROM userlist WHERE user = '$_POST['username']'";
mysql_query($sql, ...);
...
Wird in das Eingabefeld "username" nur admin eingegeben, so übermittelt PHP an den MySQL-Server folgendes:
Code:
SELECT * FROM userlist WHERE user = 'admin'
Wird die Eingabe nicht escaped (wie mit den Funktionen von crash), könnte ein Hacker aber auch admin' or '1' = '1 eingeben. Nun würde an der MySQL-Server dies übermittelt:
Code:
SELECT * FROM userlist WHERE user = 'admin' or '1' = '1'
Somit ergibt die Bedingung immer wahr und es können alle User ausgegeben werden.
 
Ok danke!

Aber wenn ich mit htmlspecialchars bzw dann mit bind_param, ist eine Injection doch unmöglich?! Das wiederum bedeutet, dass nur auf schlechten Websiten so Daten geklaut werden können, denn ich kann mir nicht vorstellen, dass ein gutes Forum solch markante Sicherheitslücken hat.

lg, freakXHTML
 
htmlspecialchars dient zum clientseitigen Escaping (also Escaping von Variablen beim Einsetzen in HTML-Code → XSS). Es hat mit Datenbanken prinzipiell nichts zu tun. Dort gibt es die mysql(i)_real_escape_string-Funktionen, bind_param, Prepared Statements (je nach Datenbank-Treiber)...

Das wiederum bedeutet, dass nur auf schlechten Websiten so Daten geklaut werden können, denn ich kann mir nicht vorstellen, dass ein gutes Forum solch markante Sicherheitslücken hat.

Software ist komplex, Bugs und Sicherheitslücken sind nie auszuschließen. Je weiter verbreitet eine Software ist, desto lohnenswerter wird sie gerade im Web als Angriffsziel für Möchtegern-Hacker (gibt für Websoftware sicherlich diverse Angriff-Scripts, die Leute nur auszuführen brauchen) und desto höher ist die Wahrscheinlichkeit, dass jemand mit genug Stochern eine Schwachstelle auftut.
 
Zurück
Oben