Warum sprechen wir eigentlich davon von "SQL" abzuraten?
Es geht ja um folgende Ratschläge:
- Verwende nicht mysql_connect sondern PDO [ gleichzusetzen mit: verwende curl_exec anstatt exec(curl..) - dass eine ist ein Func-Call, dass andere ein neuer Prozess , weswegen man davon abrät ]
- Verwende nicht direkt Variablen sondern Prepared Statements [ Wie wir wissen können prep-statements ohne Validierung sinnlos sein und trotzdem SQL-Inj. erlauben. Das könnte man gleichsetzen mit exec ohne die Validierung des Inputs des Users der gegebenenfalls weitere Parameter einschleust, weswegen man davon abrät ]
In Wirklichkeit könnten wir auch noch ein Dutzend anderer Befehle listen, die Sicherheitsrisiken bieten, wenn man nicht korrekt validiert. Auch kann man sagen, dass im Grunde (ohne andere Fakten zu betrachten) das meiste sicher ist, sofern man alles korrekt spezifiziert und validiert. Validierung heißt in dem Fall sowohl die Eingaben, als auch Ausgaben an jeder Stelle, egal ob Input durch User oder nicht, egal was man nicht macht oder zusätzlich macht.
Aus dem Grund hat auch jeder von uns das Korrekte zu exec gesagt:
- Syr und HaZe, die voraussetzen, dass korrekt validiert wird (deswegen keine Gefahr sehen)
- Nimbus und ich, die darauf Hinweisen, dass man sich durch schlampiges Verhalten selbst eine Sicherheitslücke dadurch schaffen kann (unter anderem wegen der Frage - wieso rät man davon ab)
- y0l0sw4gg3r keine Ahnung warum, denn er hat seinen möglichen Grund für die Ablehnung des Befehls nicht genannt.
Fälle wann etwas sinnvoller wäre steht ja nicht im Raum. Das würde dann jedoch eine über Seiten führende Debatte bzw. Zusammenfassung werden. Immerhin hängts vom "was" und "wie" ab.
Wieso rät man davon ab ist eine Verallgemeinerung - nicht jeder wird einem davon abraten, manchmal ist es sogar dumm jemanden von seinem vorhaben abzuraten, wenn es am Ende so sogar mehr Peformance liefert und gleich sicher oder noch sicherer wird (wink auf Prepared Statements - die für manche der Universalschutz gegen SQL-Inj. sind).




Zitieren