SQL Injection ist einer der erfolgreichsten Angriffsvektoren gegen Webseiten. Überraschend viele Seiten, auch von namhaften Firmen (z.B. Sony), wurden und werden durch SQL Injection angegriffen. Dabei ist der Schutz dagegen eigentlich ganz einfach...
Das Problem ist z.B.:
PHP:
$einlesen = mysql_query("SELECT COUNT(*) FROM nutzer WHERE barcode='".$_POST['bcb']."'");
Du hast keinerlei Filter vor deiner POST-Variable. Wenn ich jetzt in $_POST['bcb'] nicht, wie du es erwartest, einen Barcode eintrage sondern einen entsprechend gewählten String kann ich sehr lustige Dinge mit deiner Datenbank anstellen.
Dein Query sieht im erwarteten Fall z.B. so aus:
Code:
SELECT COUNT(*) FROM nutzer WHERE barcode='1234'
Was passiert, wenn ich jetzt in dem POST einfach mal den String
';DELETE * FROM nutzer where id = '1 eintrage? Dein Query verändert sich zu:
Code:
SELECT COUNT(*) FROM nutzer WHERE barcode='';DELETE FROM nutzer where id = '1'
Siehst du, was ich hier gemeines gemacht hab? Und die Möglichkeiten sind noch viel größer. Über SQL Injection sowie die Reaktion des Servers kann man im günstigsten Fall alle Informationen der Datenbank erhalten und evtl. über die Execute-Befehle sogar auf die Shell zugreifen.
Ach ja, der einfachste Weg um Injections herum zu kommen ist die halbautomatische Filterung aller Werte. Kapsel jede Variable, deren Ursprung und Inhalt du nicht 100% genau kennst/vorhersagen kannst in mysql_real_escape_string()
Also z.B. mysql_real_escape_string($_POST['bcb']); wäre sicher vor Injections. Einfach um jedes GET oder POST so n Ding und du bist auf nem guten Weg.