Einzelnen Beitrag anzeigen

jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#16

AW: SQL Injection verhindern?

  Alt 22. Apr 2022, 20:33
..
Und in diesem Fall würde ein Datenbankbefehl ins Leere laufen?
Na probiers aus. Es beißt nicht.

Wenn überall davor gewarnt wird, Injections zu vermeiden, dann ist das so ähnlich, wie die Warnung vor dem Umspannhäuschen mit Schildern: Achtung Starkstrom.
Man könnte argumentieren, die Techniker gehen ja auch da rein und kommen lebend wieder raus. Tatsächlich! Und niemand weiß, was in den Häuschen geschieht.
Bei SQL ist das anders. Und ehrlich, wenn es Dir bis jetzt egal war oder zu kompliziert mit SQL, willst Du 1000 Details wissen?

Allein mein Hinweis, dass Du damit Typen behandeln kannst, erklärt für alle Typen außer Text, dass Injection nicht möglich ist. Du kannst kein SQL Text in einen Parameter vom Typ Integer packen. Das fliegt Dir schon im Client um die Ohren.

Bleibt der Text Typ, also Dein Beispiel mit Egon. Ich kann die Frage verstehen.
Ich kann es nicht für alle DB sagem (z.B. ABS habe ich einmal im Leben benutzt und es interessiert mich nicht. Für mich ist es so: ist ein guter Schritt weg von BDE, aber auch zu kurz gesprungen. Naja ist auch abhängig vom Einsatzzweck), aber die Parameter Auflösung geschieht erst auf dem Server (den es bei ABS so nicht gibt). Wenn das unbefüllte Statement beim Server ankommt, geschehen viele Dinge, die einen theoretisch nicht interessieren müssen (Blackbox Prinzip). Oft ergibt sich das Interesse erst zwangsweise, bei Fehlern oder schlechter Performance. Eine Sache ist die Query Planung. Der Server analysiert, wie er die Abfrage am schnellsten ausführen kann. Dabei spielen z.B. vorhandene Indizes eine Rolle. Diese Query Planung kostet wiederum Zeit. Um die zu sparen, geschieht zuerst etwas ziemlich billiges. Der Server schaut in der Liste der bereits geplanten Queries, ob er die gleiche Query bereits geplant hat. Dabei wird ein simpler Textvergleich z´wischen alten und der neuen Query durchgeführt. Eine nicht-parametrierte Query wird selten zu einem Treffer führen bei dieser Suche. Außer es wird ständig der gleiche Egon gesucht. Steht statt Egon eine feste Variable in der Query, funktioniert der Mechanismus bestens. Die neue wird bei den geplanten Queries gefunden, Planung bereits vorhanden, Analyse fällt weg. Erst jetzt wird der übegebene Parameter eingesetzt. An dieser Stelle liegt es in den Händen des Serverherstellers, wie er mit dem Problem Injection umgeht. Die haben da auch kein Bock drauf.

Du kannst das alles ergründen und ausprobieren für ABS oder andere Anbieter oder Du kannst die Spielregeln akzeptieren. Es gibt andere Mechanismen, die Injection verhindern und es gibt noch andere Vorteile bei parametrierten Queries.
Zu allem gibt es massig Infos im Internet und wahrscheinlich auch für ABS. Für sowas sucht man sich ein Tutorial oder die Handbücher raus und schaut sich die Erklärungen an oder fragt in den Anbieterforen. Sogar die Kommandozeilen Clients der Anbieter erlauben es, parametrierte Queries zu starten. Das gibt es nicht zum Spaß. Und bei Delphi hat man sogar etwas Komfort bei der Befüllung.
Gruß, Jo
  Mit Zitat antworten Zitat