SQL-Injection verhindern

Qwert

Benutzer
Beiträge
5
Hallo,

ich bin neu was SQL angeht und möchte eine Datenbank vor Angriffen schützen.

Reicht es aus, wenn ich die Zeichen ' und " nicht zur Verwendung erlaube und zusätzlich vor dem Eintragen eines Strings in die Datenbank den String an jeder zweiten Stelle durch ein beliebiges Zeichen erweitere:
Aus DROP TABLE tabelle wird also DdRdOdPd dTdAdBdLdEd dtdadbdedldlded

Vielen Dank!
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.731
Hallo,

ich bin neu was SQL angeht und möchte eine Datenbank vor Angriffen schützen.

Reicht es aus, wenn ich die Zeichen ' und " nicht zur Verwendung erlaube und zusätzlich vor dem Eintragen eines Strings in die Datenbank den String an jeder zweiten Stelle durch ein beliebiges Zeichen erweitere:
Aus DROP TABLE tabelle wird also DdRdOdPd dTdAdBdLdEd dtdadbdedldlded

Vielen Dank!

Hä?

Der beste Schutz vor SQL-Injection sind prepared Statements.
 

Qwert

Benutzer
Beiträge
5
Habe nun aus einem Tutorial auf meine Anwendung übertragen:
<?php
mysql_connect("...","db","passwort") or die ("Keine Verbindung moeglich");
mysql_select_db("...") or die ("Die Datenbank existiert nicht.");

$stmt = $dbh->prepare("INSERT INTO datanbank(id, device_id) VALUES :)id, :did)");

$id = $_POST['id'];
$did = $_POST['device_id'];

$stmt->bindParam(':id', $id);
$stmt->bindParam(':did', $did);

$stmt->execute();

?>
So funktioniert es aber nicht. Was ich mich frage, ist, was mit der Variablen $dbh ist, da die ja nirgendwo definiert wird. Was habe ich falsch gemacht?

Danke!
 

Qwert

Benutzer
Beiträge
5
Ok, ich habe die Zeilen

$stmt->bindParam(':id', $id);
$stmt->bindParam(':did', $did);

mit den Zeilen

$id = $_POST['id'];
$did = $_POST['device_id'];

vertauscht.

Geht aber immer noch nicht :(.

EDIT: Und ich habe folgendes eingefügt:
$dbh = new PDO('mysql:host=host;dbname=dbname', 'user', 'passwd');
 
Zuletzt bearbeitet:
Werbung:
Oben