![]() |
Re: FireBird - Prepared Statement - SQL Injection
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
|
Re: FireBird - Prepared Statement - SQL Injection
Zitat:
|
Re: FireBird - Prepared Statement - SQL Injection
Also kann ich da rauslesen, dass für ein Statement wie dem obigem die prepared-Sache am besten geeignet wäre?
Grüße, Frederic |
Re: FireBird - Prepared Statement - SQL Injection
Zitat:
|
Re: FireBird - Prepared Statement - SQL Injection
Hallo,
Zitat:
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 |
Re: FireBird - Prepared Statement - SQL Injection
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 Nutzer:Passwort-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 |
Re: FireBird - Prepared Statement - SQL Injection
Zitat:
|
Re: FireBird - Prepared Statement - SQL Injection
Zitat:
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
SQL-Code:
Durch das OR wird die eigentliche Passwort/User Abfrage aufgehoben.
SELECT id FROM user WHERE username= 'xx' AND passwd = 'XX' OR (username LIKE '%ADMIN%' AND passwd LIKE '%')
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:
Das hatte ich noch vergessen. :-(
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 Und in Deinem Programm so aufrufen
SQL-Code:
Gruß Hartmuth
SELECT ID FROM SP_LOGIN(USERNAME,PW)
|
Re: FireBird - Prepared Statement - SQL Injection
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 |
Re: FireBird - Prepared Statement - SQL Injection
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:40 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-2025 by Thomas Breitkreuz