AGB  ·  Datenschutz  ·  Impressum  







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

FireBird - Prepared Statement - SQL Injection

Ein Thema von fkerber · begonnen am 15. Jul 2009 · letzter Beitrag vom 16. Jul 2009
Antwort Antwort
Seite 2 von 2     12   
mkinzler
(Moderator)

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

Re: FireBird - Prepared Statement - SQL Injection

  Alt 15. Jul 2009, 20:55
In Stored Procedures kann man neben "normalem" SQL-Code auch Strukturierte Anweisungen ( IF..Then..Else, For usw.) verwenden. So kann man Programmlogik auf den Server verlagern
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#12

Re: FireBird - Prepared Statement - SQL Injection

  Alt 15. Jul 2009, 21:04
Zitat von mkinzler:
Es ging mir nicht um den Queryplan, sondern um die Reduktion der Datenmenge bzw. Verlagerung von Logik vom Client zum Server
Das kann man auch duch ein 3 bzw. N-Tier Architektur. Und m.E. ist es besser sich nicht zu sehr auf DB-Eigenheiten einzulassen um den Vendor-Lockin nicht zu groß werden zu lassen. Und auch Programmupdates erfordern ohne SP's bei weiten seltener ein DB-Update (mit Problem entsprechend die DB kurzzeitig offline schalten zu müssen).
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#13

Re: FireBird - Prepared Statement - SQL Injection

  Alt 15. Jul 2009, 21:07
Also kann ich da rauslesen, dass für ein Statement wie dem obigem die prepared-Sache am besten geeignet wäre?


Grüße, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: FireBird - Prepared Statement - SQL Injection

  Alt 16. Jul 2009, 05:39
Zitat von fkerber:
Also kann ich da rauslesen, dass für ein Statement wie dem obigem die prepared-Sache am besten geeignet wäre?


Grüße, Frederic
Ja für einfache Abfragen sind SPs meiner Meinung nach oversized. Es gibt aber auch Programmiererer, die alles als SPs implementieren
Markus Kinzler
  Mit Zitat antworten Zitat
borwin

Registriert seit: 14. Sep 2006
Ort: Rostock
72 Beiträge
 
Delphi 2007 Enterprise
 
#15

Re: FireBird - Prepared Statement - SQL Injection

  Alt 16. Jul 2009, 07:49
Hallo,

Zitat:
Ist folgendes "Vorgehen" sicher bzg. SQL Injections?
So wie Du es vor hast sehe ich schon eine Möglichkeit. Wenn man mit ein bischen probieren folgendes eingibt könnte man sich
Userrechte eines Admins 'erschleichen'
Benutzername: 'xxx'
Password: "'XX' OR (username LIKE '%ADMIN%' AND passwd LIKE '%'"

Wenn man die Abfrage in eine SP legt, ist sowas nicht möglich.
Der Vorteil wäre auch noch, dass man weitere Verarbeitungen in die gleiche SP legen kann. z.B. Abspeichern der Anmeldung,
prüfen von SessionsID.
Ich habe für ein Webprojekt alles komplett in SP gelegt. Will ich jetzt von php auf z.B. ASP.net umsteigen muss ich die Verarbeitungslogig gegen die DB
nicht mehr migrieren.

Gruß Borwin
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#16

Re: FireBird - Prepared Statement - SQL Injection

  Alt 16. Jul 2009, 09:35
Hi!

oO
Ich blicke bei den ganzen Anführungszeichen nicht so ganz durch - kannst du ein konkretes Beispiel ohne zusätzliche Anführungszeichen machen.

Also sagen wir, es gibt folgende Nutzerasswort-Kombis:

normalerNutzer:pass1
admin:pass2

Was müsste man jetzt als Benutzername und Passwort eingeben, um mit obigem Code sich unrechtmäßig als admin einloggen zu können?
Ich dachte, die prepared-Geschichte würde mich vor diesen Anführungszeichen-Spielereien schützen?



Grüße, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: FireBird - Prepared Statement - SQL Injection

  Alt 16. Jul 2009, 09:42
Zitat:
Ich dachte, die prepared-Geschichte würde mich vor diesen Anführungszeichen-Spielereien schützen?
Das ist auch ein einer der Gründe Parameter einzusetzen.
Markus Kinzler
  Mit Zitat antworten Zitat
borwin

Registriert seit: 14. Sep 2006
Ort: Rostock
72 Beiträge
 
Delphi 2007 Enterprise
 
#18

Re: FireBird - Prepared Statement - SQL Injection

  Alt 16. Jul 2009, 10:45
Zitat:
Ich blicke bei den ganzen Anführungszeichen nicht so ganz durch - kannst du ein konkretes Beispiel ohne zusätzliche Anführungszeichen machen.
In Deinem Feld für Benutzername würde ich nur dummy Werte eingeben z.B. xx
Beim Passwort genau diese Zeichenkette : 'XX' OR (username LIKE '%ADMIN%' AND passwd LIKE '%')
Die Hochkomma sind Notwendig, da er die gesamte Zeichenkette quasi als Passwort an das SQL anhängt. Damit würde Dein eigentliches
SQL veränder werden. Wenn Du es als String ausgebe lässt, sieht es dann so aus

SELECT id FROM user WHERE username= 'xxAND passwd = 'XXOR (username LIKE '%ADMIN%AND passwd LIKE '%') Durch das OR wird die eigentliche Passwort/User Abfrage aufgehoben.
Das SQL würde genau so an die Datenbank geschickt.

Mit prepared und Parameter solltes es so wie oben beschrieben eigentlich nicht mehr möglich sein. Da für kenne ich aber php zu wenig.
Wie gesagt ich würde immer eine SP vorziehen. Da bist Du auf der sicheren Seite.

Das Könnte dann so aussehen

SQL-Code:
CREATE PROCEDURE SP_LOGIN (
    USERNAME VARCHAR(40),
    PW VARCHAR(40))
RETURNS (
    ID INTEGER)
AS
BEGIN
  SELECT ID
  FROM USER
  WHERE username = :USERNAME
  AND passwd = :PW
  INTO :ID;
  SUSPEND;
END
Das hatte ich noch vergessen. :-(
Und in Deinem Programm so aufrufen

SELECT ID FROM SP_LOGIN(USERNAME,PW) Gruß Hartmuth
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#19

Re: FireBird - Prepared Statement - SQL Injection

  Alt 16. Jul 2009, 11:34
Hi!

Danke für dein Code-Beispiel.

Jetzt nochmal ganz konkret meine Frage:
Reicht die Verwendung eines prepared-Statements, um die ' und "-Spielereien auszuschalten oder ist die Verwendung einer SP notwendig?


Grüße, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#20

Re: FireBird - Prepared Statement - SQL Injection

  Alt 16. Jul 2009, 11:56
Zitat von fkerber:
Reicht die Verwendung eines prepared-Statements, um die ' und "-Spielereien auszuschalten oder ist die Verwendung einer SP notwendig?
Die verwendung von parametrisierten Abfragen reicht - egal ob du die nun preparst für Performanceverbesserung bei mehrfacher verwendung oder nicht.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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