Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   db afrage username und passwort (https://www.delphipraxis.net/197293-db-afrage-username-und-passwort.html)

strom 27. Jul 2018 11:55

Datenbank: firebird • Version: 3.0 • Zugriff über: table

db afrage username und passwort
 
hallo,

mochte über eine table(username) eine abfrage starten, für username und pasword.

Wie sollte sowas aussehen?

Delphi-Quellcode:
username.SQL.Text := 'Select * from USERNAME WHERE NAME = ' + QuotedStr(Edit1.Text) + ' AND PASSWORD = ' + QuotedStr(Edit2.Text);

Redeemer 27. Jul 2018 12:03

AW: db afrage username und passwort
 
Die Frage ist zu unspezifisch, was hast du vor?

himitsu 27. Jul 2018 12:29

AW: db afrage username und passwort
 
Passwörter niemals im Klartext speichern.

Deine Komponente kann bestimmt Parameter und die sollte man verwenden,
aber wenn nicht, dann sollte man unbedingt die "richtige" Excape-Funktion verwernden und QuotedStr ist da definitiv falsch, da es eine komplett andere Syntax benutzt.



Hashen und dann den Hash vor der Übertragung berechnen, also nicht erst im Query, nach dem das Passwort im Karltext durch's Netz lief.
SQL-Code:
SELECT * FROM username WHRERE name = :name AND password = md5(:salt + :name + :passwort);
Delphi-Quellcode:
Q.SQL.Text = 'SELECT * FROM username WHRERE name = :name AND password = :pass;';
Q.ParaByName('name').AsString := Edit1.Text;
Q.ParaByName('pass').AsString := md5(salt + Edit1.Text + Edit2.Text);
Q.Open

haentschman 27. Jul 2018 12:34

AW: db afrage username und passwort
 
Hallöle...:P

Du möchtest etwas lernen :zwinker: Dann sei nicht böse...:wink:
Zitat:

username.SQL.Text := 'Select * from USERNAME WHERE NAME = ' + QuotedStr(Edit1.Text) + ' AND PASSWORD = ' + QuotedStr(Edit2.Text);
...dabei rollen sich mir die Fußnägel hoch. :?

Begründung:
1. Der SQL Injection ist damit Tür und Tor geöffnet. Bitte verwende Parameter. :thumb: https://de.wikipedia.org/wiki/SQL-Injection
2. Niemals Benutzernamen und Passwörter im Klartext in die DB speichern. Beim Benutzernamen drücke ich ein Auge zu...aber beim Passwort nicht. Setze dich mal mit Verschlüsselung, auch wenn es nur eine leichte Verschlüsselung ist, auseinander.

:P

mkinzler 27. Jul 2018 12:56

AW: db afrage username und passwort
 
Noch besser gar keine Passwörter, sondern nur einen Hash (Obwohl ich heutzutage keinen MD5 mehr verwenden würde).

himitsu 27. Jul 2018 13:12

AW: db afrage username und passwort
 
Bei Hash's mache ich es inzwischen so, dass ich den Typ mit in den String einbaue.

Code:
md5:45453241513246
sha2a:454532415132461
Hash's kann man nich entschlüsseln, also lassen sich Passwörter nicht umkodieren, wenn man die Methode änder,
aber so kann man später etwas anderes einbauen und die alten Passwörter funktionieren weiterhin (kann man ja über ein Karenzzeit die Nutzer überreden das Passwort mal neu zu speichern, bzw. nach erfolgreichem Einloggen das Eingegebene im neuen Format neu speichern lassen)
Code:
sha2a:fdsfdsa:454532415132461
So kann man im selben Fehld auch gleich noch 'nen nutzerabhängigen Salt mit verpacken

strom 27. Jul 2018 15:09

AW: db afrage username und passwort
 
hallo,

haben hier ein problem bzw. fehlermeldung:

Dynamic SQL Error
SQL error code= -104
Token unknown -line 1, colum 31
name.



Delphi-Quellcode:
procedure TForm2.BitBtn3Click(Sender: TObject);
begin
 with Form3 do begin

    Query.SQL.Text := 'SELECT * FROM BENUTZER WHRERE name = :name AND password = :pass;';
    Query.ParamByName('name').AsString := Edit1.Text;
    Query.ParamByName('pass').AsString := Edit2.Text;
    Query.Open;

 end;

 if Query.EOF then showmessage('Fehler')
  else form3.Show;

end;

haentschman 27. Jul 2018 15:10

AW: db afrage username und passwort
 
Zitat:

WHRERE
8-)

jobo 27. Jul 2018 15:11

AW: db afrage username und passwort
 
"Where " ist Statement falsch geschrieben.

mkinzler 27. Jul 2018 15:19

AW: db afrage username und passwort
 
Zusätzlich ist NAME ein reserviertes Wort. Entwder excapen

SQL-Code:
... where "name" = :name ...
oder besser username o.ä. verwenden.

strom 27. Jul 2018 15:42

AW: db afrage username und passwort
 
jetzt kommt keine Fehlermeldung mehr :-)
aber geht trozdem nicht ?

Delphi-Quellcode:
procedure TForm2.BitBtn3Click(Sender: TObject);
begin
 with Form3 do begin

    Table.SQL.Text := 'SELECT * FROM BENUTZER WHERE username = :name AND password = :pass;';
    Table.ParamByName('name').AsString := Edit1.Text;
    Table.ParamByName('pass').AsString := Edit2.Text;
    //Table.Open;

 end;

 if Table.EOF then showmessage('Fehler')
  else form3.Show;

end;

mkinzler 27. Jul 2018 15:49

AW: db afrage username und passwort
 
Wie heisst den die Spalte in der Datenbank?

strom 27. Jul 2018 15:53

AW: db afrage username und passwort
 
die Spalten

id
username
password

die Datenbank BENUTZER

mkinzler 27. Jul 2018 16:01

AW: db afrage username und passwort
 
Ohen die Abfarge auzuführen wird kein Ergebnis geliefert werden

Zitat:

Delphi-Quellcode:
//Table.Open;


haentschman 27. Jul 2018 16:19

AW: db afrage username und passwort
 
Moin...:P

Fragen:
1: Warum heist die Query nun Table? Ist es eine Table oder immer noch eine Query?
2: Bitte laß das with xxx do einfach weg. Das macht nur Probleme...

strom 27. Jul 2018 16:24

AW: db afrage username und passwort
 
Habe ein wenig experimentiert,
einmal mit einer Query Komponente und einmal mit einer Table Komponente.

Bei der Query Komponente kommt immer noch eine Fehlermeldung, bei der Table nicht!

Wie könnte eine bfrage aussehen?

Delphi-Quellcode:
  if Edit1.Text = Query.ParamByName('user').AsString then begin
  if Edit2.Text........

haentschman 27. Jul 2018 16:37

AW: db afrage username und passwort
 
Zitat:

Bei der Query Komponente kommt immer noch eine Fehlermeldung, bei der Table nicht!
Du mußt wissen, daß bei einer Table ALLE Datensätze geladen verden. Mit einer Query kannst du nur die Daten holen die du magst. :thumb:
Delphi-Quellcode:
if Edit1.Text = Query.ParamByName('user').AsString then begin
...ist eindeutig falsch. Ein Parameter ist nur für die Aufnahme von Werten für die Query (SQL) da.
Dein Parameter im SQL heißt (letzter Stand) :name ... diesen mußt du füllen.
Delphi-Quellcode:
Query.ParamByName('name').AsString := 'Blubb';
PS: wie schon benmerkt ist name ein schlechter Bezeichner.

Delphi.Narium 27. Jul 2018 16:40

AW: db afrage username und passwort
 
ParamByName ist für die Übergabe von Werten an die Abfrage vor dem Öffnen derselben.

FieldByName ist für das Abholen von Werten nach dem Öffnen der Abfrage.

Ansonsten ist der gepostete Quelltext etwas knapp, um da zielgerichtet antworten zu können. Mal ein Schuss ins Blaue mit Hilfe der :glaskugel:
Delphi-Quellcode:
if Edit1.Text = Query.FieldByName('username').AsString then begin
  if Edit2.Text........
Wie heißt das Feld mit dem Benutzernamen in der Datenbank denn jetzt nun:

Wir haben da mal Name, nach Hinweisen auf Fehlermöglichkeiten wurde daraus Username und jetzt ist es User?

p80286 27. Jul 2018 17:27

AW: db afrage username und passwort
 
Der vollständige Sourcecode wäre jetzt nicht schlecht,
und wenn etwas nicht funktioniert, wäre es gut zu wissen was nicht funktioniert.

Gruß
K-H

strom 27. Jul 2018 18:58

AW: db afrage username und passwort
 
hallo,
einen vollständigen Sourcecode gibt es noch nicht, bin noch am experimentieren.

es sollte über Edit1 (User) und Edit2 (Password) und einem Button ein Login erfolgen.

Username und Passwort stehen in einer db

wie ich das ganze sinnvoll und einfach löse??? :oops:

strom 27. Jul 2018 19:16

AW: db afrage username und passwort
 
Gibt es hier vielleicht Beispiele?
Finde hier leider nichts :(

haentschman 28. Jul 2018 05:48

AW: db afrage username und passwort
 
Moin...:P

Nichts ist besser als eine bestimmte Aufgabe zu programmieren. :thumb: Aber damit bist noch überfordert. :?
Ich empfehle dir:

1. Delphi Crash Kurs https://www.google.de/search?ei=r_Bb....0.-LwP0KrnS0A
2. Datenbank Tutorial https://www.google.de/search?source=....0.L0D9Ti9emBk
3. SQL Tutorial https://www.google.de/search?ei=BvBb....0.9kkqI3iPUTw

p80286 29. Jul 2018 00:23

AW: db afrage username und passwort
 
Zitat:

Zitat von strom (Beitrag 1408931)
einen vollständigen Sourcecode gibt es noch nicht, bin noch am experimentieren.

Dann liegt wahrscheinlich kein ausgereifter Sourcecode vor, wenn Du die ganze Unit zeigst, wissen wir auch was Du gemacht hast und vielleicht kann man auch Fehler erkennen.

Zitat:

Zitat von strom (Beitrag 1408931)
wie ich das ganze sinnvoll und einfach löse??? :oops:

Dein bisheriger Ansatz war ja schon mal nicht schlecht, aber die Umsetzung war eher suboptimal jedenfalls die Krümel die Du uns gezeigt hast.


Gruß
K-H

Frickler 30. Jul 2018 10:10

AW: db afrage username und passwort
 
Zitat:

Zitat von haentschman (Beitrag 1408866)
1. Der SQL Injection ist damit Tür und Tor geöffnet. Bitte verwende Parameter. :thumb: https://de.wikipedia.org/wiki/SQL-Injection

Da habe ich doch gleich mal ne Frage: muss ich auch "SQL Injection" fürchten, wenn das Programm in keinster Weise mit dem Web, Webservern, CGI, PHP usw. zu tun hat? Wie findet in dem Fall ein Angriff statt und von wem?

mkinzler 30. Jul 2018 10:13

AW: db afrage username und passwort
 
Die Verhinderung von SQL-Injection ist nur ein Vorteil von (SQL-)Parametern.

Frickler 30. Jul 2018 10:27

AW: db afrage username und passwort
 
Zitat:

Zitat von mkinzler (Beitrag 1409061)
Die Verhinderung von SQL-Injection ist nur ein Vorteil von (SQL-)Parametern.

Das ist wahr. Je nach Datenbank kann mit Parametern die Abfrage in der "Prepare" Phase optimiert werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:35 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