Ich sitze gerade an meiner Projektarbeit und soll relativ kompakt erklären, wie SQL-Injection technisch funktioniert und warum Prepared Statements das verhindern. Das Prinzip an sich habe ich schon verstanden: Nutzereingabe wird ungeprüft in eine Abfrage eingebaut und dadurch kann jemand zusätzliche SQL-Befehle einschleusen. Aber an einer Stelle hänge ich gedanklich fest.
Wenn ich mir sowas wie eine Login-Abfrage vorstelle, die per String-Konkatenation zusammengebaut wird, verstehe ich, dass am Ende ein veränderter String bei der Datenbank ankommt. Aber mir ist nicht ganz klar, an welcher Stelle im Ablauf genau der Übergang passiert – also ob die Anwendung quasi "glaubt", sie schickt nur Text, und die Datenbank diesen Text dann als Befehl interpretiert, oder ob das schon vorher irgendwie unterschieden wird.
Und bei Prepared Statements verstehe ich nicht ganz, warum die Eingabe dort nicht mehr als Code ausgeführt werden kann. Wird die Eingabe da anders übertragen oder einfach nur anders maskiert?
Hat jemand eine anschauliche Erklärung oder vielleicht ein einfaches Beispiel, an dem man das nachvollziehen kann?