Moin!
Also vorweg ich habe MySql 5.0.91
über eine URL wird eine id Nummer übergeben
bla.php?id=1
daraus wird dann eine MySql Abfrage:
select viele Felder von Tabelle where id='" . (int)$HTTP_GET_VARS['id'] ."'Was muß/ kann ich machen, damit die Abfrage sicher ist?
Die Abfrage ist, so wie sie da steht, sicher.
Keine Ahnung, warum alle anderen, die bisher geantwortet haben, und es hätten wissen müssen, dein Cast auf Integer übersehen haben. Aber genau dieses (int) vor der Variable sorgt in diesem Fall für ausreichende Sicherheit - das Resultat können nur Integer-Zahlen sein, die dort in den SQL-String gelangen.
Man könnte doch selber eine Abfrage eingeben ala
bla.php?id=1+Union+Select+1,group_concat(lese andere Tabelle aus)
Versuchs selbst mal, und lass dir den erzeugten SQL-String mal anzeigen. Du wirst sehen, dass von deinen Buchstaben nix ankommt.
Aber im Grundprinzip hast du genau erfasst, was das Problem ist - und die Antwort ist, dass du Kontextwechsel beachten musst, indem du das passende Escaping durchführst - siehe Antwort von Vinzenz Mai.
- Sven Rautenberg