Einzelnen Beitrag anzeigen

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, 11: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