Malcolm Beck´s: Frage zu Prepared Statement

Beitrag lesen

hi,

$myquery = mysqli_real_escape_string($verbindung, $_GET['kategorie']);
Nur weiss ich nicht, ob dass jetzt doppelt escaped wird, dass wäre ja nicht erwünscht.

Wird es. Das Escapen übernimmt irgendwelcher C-Code hinter bind und execute, falls notwendig,

Also könnte ich, wenn ich mit Prepared Statements arbeite, auf mysqli_real_escape_string verzichten, ich werde das Risiko einfach mal eingehen :)

oder idealerweise werden die Daten freundlicherweise getrennt vom SQL übertragen, so dass überhaupt kein Escaping notwendig ist, nicht einmal im C-Code.

Wie soll das funktionieren?

Brauch ich ja nicht einmal, es geht nur um escapen.

Du mußt JEDE EINZELNE Benutzereingabe validieren. Validieren ist nicht Escapen. Validieren bedeutet, die Benutzereingabe auf Typ, Größe, Wert, Konsistenz zu prüfen. Wenn Du das konsequent machst, und zwar so paranoid wie möglich, dann ist ein Angriff über manipulierte Benutzereingaben schon einmal extrem schwierig.

Ja, dass war jetzt auch für mich Verständlich, ich ging die ganze Zeit davon aus, "User eingaben validieren" wäre mit escapen erledigt.
Logisch, und wenn man es so liest, auch Selbstverständlich.
So kann ich ja auch direkt eingaben wie ?irgendwas=include('hackerzeugs'), was recht häufig in meinen Statistiken auftaucht, direkt mit die() beenden.

Perls Taint-Mode ist in Sachen Eingabevalidierung extrem hilfreich,

Perl kann ich nicht verwenden, also ich, mein Server schon, wäre mir aber auch zu kompliziert, jetzt noch Perl mit ins Spiel zu bringen.

Danke für die Hilfe.

mfg