Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Injection verhindern? (https://www.delphipraxis.net/210421-sql-injection-verhindern.html)

NoGAD 21. Apr 2022 23:56

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 :-)

haentschman 22. Apr 2022 05:48

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;

stifflersmom 22. Apr 2022 06:44

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:
'select * from Personen where Name = '+QuotedStr(Edit1.text)
Und wenn im Edit1 ein 'Hansen steht, dann würde daraus ein:
Code:
'select * from Personen where Name = 'Hansen';
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:
Code:
'select * from Personen where Name = 'Hansen'; DROP TABLE blablabla;'';
Hier würde jetzt also der zusätzliche Befehl DROP TABLE ... ausgeführt werden können.

Das war jetzt, sehr simpel, ein mögliches Szenario zusammengetippt.

haentschman 22. Apr 2022 07:22

AW: SQL Injection verhindern?
 
:zwinker:
Lesestoff: https://de.wikipedia.org/wiki/SQL-Injection

himitsu 22. Apr 2022 07:50

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.

Frickler 22. Apr 2022 08:14

AW: SQL Injection verhindern?
 
Zitat:

Zitat von himitsu (Beitrag 1504935)
@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.

Hat er doch gar nicht behauptet.



P.S.: https://xkcd.com/327/

NoGAD 22. Apr 2022 08:49

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?

mkinzler 22. Apr 2022 09:01

AW: SQL Injection verhindern?
 
Zitat:

Warum wird bei einer Suche ein : vor den Suchbegriff gestellt (:Bla)?
Kennzeichnet den Parameter/Platzhalter

haentschman 22. Apr 2022 09:03

AW: SQL Injection verhindern?
 
Zitat:

würde es ausreichen, Semikolons aus einem Suchbegriff zu entfernen
...nein. :wink:

Da sind wir wieder am Anfang: Immer Parameter! :warn: :zwinker:
Zitat:

Warum wird bei einer Suche ein : vor den Suchbegriff gestellt (:Bla)?
Delphi-Quellcode:
where Blubchen = :BLA
...Parameter beginnen immer mit :

Der Name des Parameters ist beliebig. Ich habe mich für 3 Großbuchstaben entschieden...:wink:

Rolf Frei 22. Apr 2022 13:52

AW: SQL Injection verhindern?
 
Zitat:

Zitat von NoGAD (Beitrag 1504944)
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?

Aus diesem Code:
Delphi-Quellcode:
Query.SQL.Text := 'select * from Personen where Name = '+QuotedStr(Edit1.Text);
Machst du das:
Delphi-Quellcode:
Query.SQL.Text := 'select * from Personen where Name = :NAME';
Query.ParamByName('NAME').AsString := Edit1.Text;
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:26 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz