![]() |
Datenbank: ABSDatabase • Version: 7.93 • Zugriff über: ABSQuery
SQL Injection verhindern?
Hallo,
durch die Nutzung von SQL für meine Datenbank habe ich überlegt, ob man eine SQL Injection erkennen kann. Gibt es besondere Strings, die man z.B. bei einer Suche filtern sollte? LG :-) |
AW: SQL Injection verhindern?
Moin...:P
Ja kann man. Wenn man ausschließlich Parameter verwendet. :thumb:
Delphi-Quellcode:
Qry.SQL.Text := 'select Bla from Blubb where Blubchen = :BLA';
Qry.ParamByName('BLA').AsString := 'Blubb'; Qry.Open; |
AW: SQL Injection verhindern?
Auf jeden Fall ein wichtiges und auch kein triviales Thema.
Injection bedeutet ja, dass irgendetwas in Deinen SQL-String eingefügt wird, was dann als zusätzlicher Befehl missbraucht wird. Als Beispiel hast Du ein EditFeld und die Eingabe darin soll als Suchstring interpretiert werden, gedacht ist dann sowas wie:
Code:
Und wenn im Edit1 ein 'Hansen steht, dann würde daraus ein:
'select * from Personen where Name = '+QuotedStr(Edit1.text)
Code:
So weit so gut, aber kommt über das Editfeld jetzt aber noch ein Hochkomma und ein Semikolon rein, dann könnte das dazu führen, dass ein zusätzlicher Befehl ausgeführt wird:
'select * from Personen where Name = 'Hansen';
Code:
Hier würde jetzt also der zusätzliche Befehl DROP TABLE ... ausgeführt werden können.
'select * from Personen where Name = 'Hansen'; DROP TABLE blablabla;'';
Das war jetzt, sehr simpel, ein mögliches Szenario zusammengetippt. |
AW: SQL Injection verhindern?
|
AW: SQL Injection verhindern?
@mom: NEIN!
QuotedStr ist für die Syntax von Pascal/Delphi-Strings, dass es zufällig "oftmals" für SQL-Strings ausreicht, verhindet keine Injection/Maskierungsfehler. Jede SQL-DB und SQL-API/Komponente hat irgendwo eine passende "Escape"-Funktion. |
AW: SQL Injection verhindern?
Zitat:
P.S.: ![]() |
AW: SQL Injection verhindern?
Danke für die Hinweise. Bitte nicht streiten. :-)
@haentschman, eine Nachfrage zum Syntax. Warum wird bei einer Suche ein : vor den Suchbegriff gestellt (:Bla)? Eine weitere Frage bezüglich SQL injection: würde es ausreichen, Semikolons aus einem Suchbegriff zu entfernen? |
AW: SQL Injection verhindern?
Zitat:
|
AW: SQL Injection verhindern?
Zitat:
Da sind wir wieder am Anfang: Immer Parameter! :warn: :zwinker: Zitat:
Delphi-Quellcode:
...Parameter beginnen immer mit :
where Blubchen = :BLA
Der Name des Parameters ist beliebig. Ich habe mich für 3 Großbuchstaben entschieden...:wink: |
AW: SQL Injection verhindern?
Zitat:
Delphi-Quellcode:
Machst du das:
Query.SQL.Text := 'select * from Personen where Name = '+QuotedStr(Edit1.Text);
Delphi-Quellcode:
Dadurch ist dein Code geschützt vor Injections. Also nie einen SQL String direkt mit den Eingaben eines Users zusammenbauen! Was da im Edit.Text drin steht ist dann vollkommen egal, da dieses nicht mehr Bestandteil des SQL ist und somit auch nicht ausgeführt wird.
Query.SQL.Text := 'select * from Personen where Name = :NAME';
Query.ParamByName('NAME').AsString := Edit1.Text; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz