AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL Injection verhindern?
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Injection verhindern?

Ein Thema von NoGAD · begonnen am 22. Apr 2022 · letzter Beitrag vom 23. Apr 2022
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
345 Beiträge
 
Delphi 10.4 Sydney
 
#1

SQL Injection verhindern?

  Alt 22. Apr 2022, 00:56
Datenbank: ABSDatabase • Version: 7.93 • Zugriff über: ABSQuery
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
Mathias
Ich vergesse einfach zu viel.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman
Online

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.387 Beiträge
 
Delphi 12 Athens
 
#2

AW: SQL Injection verhindern?

  Alt 22. Apr 2022, 06:48
Moin...

Ja kann man. Wenn man ausschließlich Parameter verwendet.
Delphi-Quellcode:
Qry.SQL.Text := 'select Bla from Blubb where Blubchen = :BLA';
Qry.ParamByName('BLA').AsString := 'Blubb';
Qry.Open;

Geändert von haentschman (22. Apr 2022 um 07:31 Uhr)
  Mit Zitat antworten Zitat
stifflersmom

Registriert seit: 8. Dez 2005
Ort: 24994 Holt
379 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: SQL Injection verhindern?

  Alt 22. Apr 2022, 07:44
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.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman
Online

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.387 Beiträge
 
Delphi 12 Athens
 
#4

AW: SQL Injection verhindern?

  Alt 22. Apr 2022, 08:22

Lesestoff: https://de.wikipedia.org/wiki/SQL-Injection
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#5

AW: SQL Injection verhindern?

  Alt 22. Apr 2022, 08:50
@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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
589 Beiträge
 
Delphi XE6 Enterprise
 
#6

AW: SQL Injection verhindern?

  Alt 22. Apr 2022, 09:14
@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/
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
345 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: SQL Injection verhindern?

  Alt 22. Apr 2022, 09:49
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?
Mathias
Ich vergesse einfach zu viel.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: SQL Injection verhindern?

  Alt 22. Apr 2022, 10:01
Zitat:
Warum wird bei einer Suche ein : vor den Suchbegriff gestellt (:Bla)?
Kennzeichnet den Parameter/Platzhalter
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman
Online

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.387 Beiträge
 
Delphi 12 Athens
 
#9

AW: SQL Injection verhindern?

  Alt 22. Apr 2022, 10:03
Zitat:
würde es ausreichen, Semikolons aus einem Suchbegriff zu entfernen
...nein.

Da sind wir wieder am Anfang: Immer Parameter!
Zitat:
Warum wird bei einer Suche ein : vor den Suchbegriff gestellt (:Bla)?
where Blubchen = :BLA ...Parameter beginnen immer mit :

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

Geändert von haentschman (22. Apr 2022 um 10:09 Uhr)
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
647 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: SQL Injection verhindern?

  Alt 22. Apr 2022, 14:52
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:
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.

Geändert von Rolf Frei (22. Apr 2022 um 14:59 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:49 Uhr.
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