Hallo,
EDIT: Geht um MySQL - ist aber an sich auch egal, da es afaik alle betrifft!
prepared statements sind wirklich toll, um SQL Injections vorzubeugen!
Leider gehen einige Sachen nicht so wie sie sollen
Beispiel:
Dolle Sache... da kann einem keiner komisch kommen, dass ist "unknackbar" =)
Nun, wenn ich jetzt aber das hier versuche, klappts nicht so recht
Nun, das mag wohl daran liegen, dass PDO (also mysql oder der Treiber, is ja auch egal) nur zugewiesene Werte maskiert, nicht aber übergebene Tabellennamen, Spaltennamen oder eben Limitierungswerte
Tja, da der Limitierungswert aber nun übergeben werden muss, würde mich interessieren, wie man diese Werte ordentlich maskiert, bzw "sicher macht".
Ich würde aus dem Bauch heraus sowas machen:
Ist das eine gute Idee? Eigentlich soll man ja keine Typen erzwingen (steht in einigen Handbüchern, ausserdem Grundtenor von vielen Leuten). Gibts bessere Wege?
EDIT: Geht um MySQL - ist aber an sich auch egal, da es afaik alle betrifft!
prepared statements sind wirklich toll, um SQL Injections vorzubeugen!
Leider gehen einige Sachen nicht so wie sie sollen

Beispiel:
PHP:
$sql = 'SELECT * FROM table WHERE ID = ?';
$stm = $link->prepare($sql);
$stm->bindParam(1,$_POST['ID']);
//... usw
Dolle Sache... da kann einem keiner komisch kommen, dass ist "unknackbar" =)
Nun, wenn ich jetzt aber das hier versuche, klappts nicht so recht
PHP:
$sql = 'SELECT * FROM table WHERE ID = ? LIMIT ?, ?';
$stm = $link->prepare($sql);
$stm->bindParam(1,$_POST['ID']);
$stm->bindParam(2,$_POST['startfrom']);
$stm->bindParam(3,$_POST['schrittweite']);
//... usw
Nun, das mag wohl daran liegen, dass PDO (also mysql oder der Treiber, is ja auch egal) nur zugewiesene Werte maskiert, nicht aber übergebene Tabellennamen, Spaltennamen oder eben Limitierungswerte

Tja, da der Limitierungswert aber nun übergeben werden muss, würde mich interessieren, wie man diese Werte ordentlich maskiert, bzw "sicher macht".
Ich würde aus dem Bauch heraus sowas machen:
PHP:
$start = (int)$_POST['startfrom'];
$weite = (int)$_POST['schrittweite'];
$sql = 'SELECT * FROM table WHERE ID = ? LIMIT '.$start.', '.weite;
$stm = $link->prepare($sql);
$stm->bindParam(1,$_POST['ID']);
//... usw
Ist das eine gute Idee? Eigentlich soll man ja keine Typen erzwingen (steht in einigen Handbüchern, ausserdem Grundtenor von vielen Leuten). Gibts bessere Wege?
Zuletzt bearbeitet: