Tom: 001 = 1 und password_hash

Beitrag lesen

Hello,

Wenn PHP also doch das als Oktalzahl erkennt, kann ich nicht in der SQL Abfrage ein 'SELECT blub FROM woauchimmer WHERE ID = '. intval($_GET['ID']) .'' schreiben, da es einfach die Oktalzahl in ein Integer umwandelt.

Hier wir keine Oktalzahl aus $_GET['ID'] gemacht, da der Pre-Parser die Zahl im Parameter gar nicht mehr in die Finger bekommt. Sie ist nämlich schon in einem String verpackt.

Als Zahl wird sie erst wieder durch den Vergeleichsoperator behandelt, der aber in diesem Falle zur SQL-Textschnittstelle gehört, also die Regeln für die SQL-Textschnittstelle einhält.

Intval() wird allerdings in PHP ausgeführt. Dort wird der in $_GET['ID'] enthaltene ParemterSTRING typgewandelt, aber nicht mehr der Interpretation Literal->Oktalzahl unterworfen.

Die Benutzung von intval() beseitigt im Übrigen hier auch die SQL-Injection-Lücke. Man muss sich eben nur darüber im Klaren sein, ob die Spalte ID in der Datenbank wirklich vom Typ Integer ist.

Liebe Grüße aus dem schönen Oberharz

Tom vom Berg

--
 ☻_
/▌
/ \ Nur selber lernen macht schlau
http://bikers-lodge.com