迪拉斯: Wie schütze ich mich am besten vor SQL-Injektion?

Beitrag lesen

Ich habe nie Magie gesagt. Intern wird mit Bedacht gequotet. Betrachte bitte das Gesamtbild.

① Escaping/Quoting kann man vergessen. Schussliger Code ohne funktioniert trotzdem in den meisten Fällen. Bei Binding braucht man zwangläufig ein prepare und ein bis mehrere execute. Eins geht ohne das andere nicht. Es gibt nichts, was man banal vergessen könnte.
② Der intuitive Ansatz (Blacklisting mit regulären Ausdrücken), wie im Ausgangsposting demonstriert, ist falsch. Das sollte schon aus dem Themenkreis Eingabevalidierung bekannt sein. Verlässt man sich auf Binding, macht man sich die Schlauheit der Leute, die wirklich Ahnung vom Thema haben, sprich tatsächlich den ISO-Standard durchgeackert und dazu Tests geschrieben haben, zu Nutze. Die Sache mit dem SELF hat auch ihre Schattenseiten, man darf das nicht aus den Augen verlieren.
③ Prepared Statements, wenn klug eingesetzt, gehen nicht so verschwenderisch mit der Rechenzeit für die Datenbank um wie normale Abfragen.
④ Die Links, die ich gegeben habe, führen zu Software, die Binding als Teil eines DB-Abstraktionslayers bietet. Ich fördere somit guten Stil, denn damit lässt sich datenbankübergreifend oder -neutral programmieren. Sollte der geneigte Programmierer eines Morgens aufwachen und merken, dass MySQL eine Spielzeugdatenbank ist, hält sich die Anpassung der Quellen ans bessere DBMS in Grenzen, im günstigsten Falle ohne Änderung.

Meine Aussage zum Thema des Threads steht.

--
水-金-地-火-木-土-天-海-冥