AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Passwortabfrage mit Datenbank abgleichen
Thema durchsuchen
Ansicht
Themen-Optionen

Passwortabfrage mit Datenbank abgleichen

Ein Thema von Thieon · begonnen am 18. Mär 2016 · letzter Beitrag vom 22. Mär 2016
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von haentschman
haentschman
Online

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

AW: Passwortabfrage mit Datenbank abgleichen

  Alt 19. Mär 2016, 12:47
Moin...
[mein Senf am Rande]
... man speichert keine Passwörter im Klartext in der Datenbank sondern nur dessen Hash z.B. Damit geht auch kein Klartext über die Leitung.
[/mein Senf am Rande]
  Mit Zitat antworten Zitat
Thieon

Registriert seit: 18. Mär 2016
9 Beiträge
 
#12

AW: Passwortabfrage mit Datenbank abgleichen

  Alt 19. Mär 2016, 14:22
Wie kann ich den Ein Passwort als Hash speichern? Und meinst Du mit "über die Leitung" das Internet bzw, Netzwerk? Weil Das Programm soll lediglich lokal auf einer Maschine verwendet werden.

Moin...
[mein Senf am Rande]
... man speichert keine Passwörter im Klartext in der Datenbank sondern nur dessen Hash z.B. Damit geht auch kein Klartext über die Leitung.
[/mein Senf am Rande]
Danke für den Hinweis.

MfG

René
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.004 Beiträge
 
Delphi 2009 Professional
 
#13

AW: Passwortabfrage mit Datenbank abgleichen

  Alt 19. Mär 2016, 16:32
Wie kann ich den Ein Passwort als Hash speichern? Und meinst Du mit "über die Leitung" das Internet bzw, Netzwerk? Weil Das Programm soll lediglich lokal auf einer Maschine verwendet werden.
Auch wenn es eine lokale Datenbank ist, ist die Speicherung der Passwörter im Klartext unvorsichtig. Ein Grund: viele Benutzer verwenden aus Bequemlichkeit das gleiche Passwort auch an anderen (eventuell erheblich 'wertvolleren') Systemen. Damit hat ein Angreifer, der in den Besitz der Benutzernamen/Passwortkombination gelangt, ideale Voraussetzungen, um andernorts erfolgreiche Anmeldungen durchzuführen.

Es ist eine Grundregel: vertraue keiner Webseite (oder Anwendung), die dein Passwort im Klartext speichert. Firmen, die es dennoch tun, werden zum Beispiel unter http://plaintextoffenders.com/ genannt. Eine "Hall of Fame" ist das nicht
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman
Online

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

AW: Passwortabfrage mit Datenbank abgleichen

  Alt 19. Mär 2016, 17:29
Moin...
Zitat:
Und meinst Du mit "über die Leitung" das Internet bzw, Netzwerk?
...ja das meinte ich. Wie aber schon gesagt gehört Klartext nie in egal welche Datenbank.
Zitat:
Wie kann ich den Ein Passwort als Hash speichern?
* man verwende die angehängte Unit (Freeware) Copyright © 2002 by Dimka Maslov
Delphi-Quellcode:
procedure TLogin.Login(aUserName, aPassword: string); // aPassword = Klartext direkt ohne Umwege aus dem Eingabeedit
var
  MD5Password: string; // Hash
begin
  MD5Password := MD5DigestToStr(MD5String(aPassword));
  aPassword := '';
// Pseudocode:
// Query... frage die Datenbank ob es einen Benutzer(aUserName) mit dem MD5Passwort gibt.
// !!! Werte immer als Parameter der Query mitgeben.
// Hat die Query eine Antwort (Resultmenge = 1) ist der Benutzer gültig
// fertsch...
// Mach was mit dem User
end;
Beim Speichern des neuen Paßwortes erzeugst du auch den MD5, setzt die Paßwortvariable auf '' und speicherst den MD5 ab. Mit obiger Methode hast du im Programm keinen Vergleich der Paßwörter. Dieser läuft quasi schon in der Datenbank. Wenn du im Programm vergleichen willst dann nur die Hashes.

PS: Das ist eine einfache Variante aber ausreichend. Sicherer geht es immer...
Angehängte Dateien
Dateityp: pas DelphiMD5.pas (13,3 KB, 14x aufgerufen)

Geändert von haentschman (19. Mär 2016 um 17:36 Uhr)
  Mit Zitat antworten Zitat
Thieon

Registriert seit: 18. Mär 2016
9 Beiträge
 
#15

AW: Passwortabfrage mit Datenbank abgleichen

  Alt 19. Mär 2016, 18:19
Erstmal möchte ich mich für deine Hilfe bedanken... und selbstverständlich auch bei allen anderen, denen ich noch nicht geantwortet habe... Aber leider hatte ich heute dafür keine Zeit, da ich den ganzen Tag auf einen blöden BOS Lehrgang bin. ...

* man verwende die angehängte Unit (Freeware) Copyright © 2002 by Dimka Maslov
Delphi-Quellcode:
procedure TLogin.Login(aUserName, aPassword: string); // aPassword = Klartext direkt ohne Umwege aus dem Eingabeedit
var
  MD5Password: string; // Hash
begin
  MD5Password := MD5DigestToStr(MD5String(aPassword));
  aPassword := '';
// Pseudocode:
// Query... frage die Datenbank ob es einen Benutzer(aUserName) mit dem MD5Passwort gibt.
// !!! Werte immer als Parameter der Query mitgeben.
// Hat die Query eine Antwort (Resultmenge = 1) ist der Benutzer gültig
// fertsch...
// Mach was mit dem User
end;
Beim Speichern des neuen Paßwortes erzeugst du auch den MD5, setzt die Paßwortvariable auf '' und speicherst den MD5 ab. Mit obiger Methode hast du im Programm keinen Vergleich der Paßwörter. Dieser läuft quasi schon in der Datenbank. Wenn du im Programm vergleichen willst dann nur die Hashes.

PS: Das ist eine einfache Variante aber ausreichend. Sicherer geht es immer...
Das sieht erstmal interessant aus, auch wenn ich es noch nicht so ganz verstanden habe aber ich werde mich morgen Abend mal daran setzten und versuchen den Code und die .pas Datei einzubinden und hoffentlich klappt es dann auch...

Aber eine Frage noch vorweg, muss das LoginFenster in der der Unit DelphiMD5 eingebaut werden oder wird die "procedure TLogin.Login..." in meiner eigentlichen Login Unit (in meinem Fall die Unit 1) mit dem Befehl "uses DelphiMD5;" automatisch abgearbeitet?

MfG und einen schönen rest Samstag

René

PS: Bitte denkt daran, ich bin erst seit ca. einer Woche mit dem Programmieren am Gange und zuvor hatte ich keinerlei Erfahrungen bzw. Kenntnisse im Bereich der Programmierung. Das einzige was ich bisher gemacht habe, ist die Homepage unseres Ortsvereins...

Geändert von Thieon (19. Mär 2016 um 18:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman
Online

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

AW: Passwortabfrage mit Datenbank abgleichen

  Alt 19. Mär 2016, 18:32
Wenn von deiner Seite die entsprechende Initiative zurückkommt helfen wir gern...
Zitat:
PS: Bitte denkt daran, ich bin erst seit ca. einer Woche mit dem Programmieren am Gange und zuvor hatte ich keinerlei Erfahrungen bzw. Kenntnisse im Bereich der Programmierung. Das einzige was ich bisher gemacht habe, ist die Homepage unseres Ortsvereins...
...das sind natürlich andere Voraussetzungen. Morgen früh drösel ich dir das etwas verständlicher auf. Unabhängig davon solltest du aber, bevor du richtig programmieren willst, den Delphi Crashkurs durcharbeiten.
http://www.delphi-treff.de/tutorials...phi-crashkurs/
  Mit Zitat antworten Zitat
Thieon

Registriert seit: 18. Mär 2016
9 Beiträge
 
#17

AW: Passwortabfrage mit Datenbank abgleichen

  Alt 19. Mär 2016, 18:42
...das sind natürlich andere Voraussetzungen. Morgen früh drösel ich dir das etwas verständlicher auf. Unabhängig davon solltest du aber, bevor du richtig programmieren willst, den Delphi Crashkurs durcharbeiten.
http://www.delphi-treff.de/tutorials...phi-crashkurs/
Danke für den Hinweis, ich werde mir das auch mal durchlesen... Ich habe untrer anderem auch das Buch BorlandDelphi 7 und gehe das Schritt für Schritt durch und ich hoffe mal, dass ich in der Uni auch entsprechend aufgeschlaut werde auch wenn es sich bei mir lediglich um eine Vertiefung im Bereich der Wirtschaftsinformatik handelt. Aber eins hat es gebracht, ich traue mich zumindest schon mal an das Thema ran, wo ich sonst immer dachte, das ich für das Programmieren zu blöd bin .

MfG


René
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman
Online

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

AW: Passwortabfrage mit Datenbank abgleichen

  Alt 19. Mär 2016, 18:52
Das Buch ist auch in Ordnung. Du solltest ein Verständnis für diverse Begrifflichkeiten und deren Verwendung haben. (Variablen, Konstanten, Prozeduren, Funktionen, Klasse, Instanz etc.)
Der Rest ist Übungssache und viel probieren.

Geändert von haentschman (20. Mär 2016 um 07:54 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman
Online

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

AW: Passwortabfrage mit Datenbank abgleichen

  Alt 20. Mär 2016, 08:05
Moin...

Dann schaun wir mal...
Zitat:
muss das LoginFenster in der der Unit DelphiMD5 eingebaut werden oder wird die "procedure TLogin.Login..." in meiner eigentlichen Login Unit (in meinem Fall die Unit 1) mit dem Befehl "uses DelphiMD5;" automatisch abgearbeitet?
Eine Unit ist eine "Sammlung" von Klassen, Funktionen, Procedure etc. welche, normalerweise, funktional zusammenhängen. An dieser Unit wird nichts verändert...sie wird einfach benutzt. Dazu wird sie im uses Abschnitt eingebunden. Dem Delphi spendierst du noch den Suchpfad in dem die PAS liegt.
Mit dem entsprechenden Vorwissen hättest du an meinem Beispielcode gesehen das mein Login eine Klasse ist. Für den Anfang geht das natürlich auch ohne. Du spendierst deinem Form eine private procedure namens Login oder ähnlich . In dieser Procedure bringst du dann die Logik, entsprechend dem Beispiel, unter.
Hinweis: Wenn du mit Query statt Table arbeitest mußt du dich auch zwangsläufig mit SQL und Parametern beschäftigen. Das kann je nach verwendeten Komponenten eingeschränkt sein.

Wie du siehst ist das nicht mal eben programmiert wenn das Basiswissen fehlt. Programmieren ist ein ständiger Lernprozess bei dem man klein anfangen und sich ständig weiterentwickeln muß. Um die Motivation nicht zu verlieren braucht man auch Erfolgserlebnisse. Die kannst du aber knicken wenn du deine Ziele zu hoch ansetzt. Dann lieber Step by Step...

Hänge mal deinen kompletten Code hier an. Da sehen wir mal wo es Nachholebedarf gibt.

Geändert von haentschman (20. Mär 2016 um 08:13 Uhr)
  Mit Zitat antworten Zitat
Thieon

Registriert seit: 18. Mär 2016
9 Beiträge
 
#20

AW: Passwortabfrage mit Datenbank abgleichen

  Alt 21. Mär 2016, 09:13
Erstmal Danke... Ich habe versuch deinen Code einzubinden, aber dann kommen lauter Fehlermeldungen:

Projekt kompilieren, Ziel: DRK: Exit code 256, Fehler: 1
DelphiMD5.pas(17,6) Fatal: Kann Windows nicht finden verwendet von DelphiMD5 des Projektinspektors.

Projekt kompilieren, Ziel: DRK: Exit code 256, Fehler: 20, Hinweise: 5
DelphiMD5.pas(234,30) Error: Operator is not overloaded: "TUINT4Array" and "Byte"
DelphiMD5.pas(235,33) Error: Operator is not overloaded: "TUINT4Array" shr "ShortInt"
DelphiMD5.pas(236,33) Error: Operator is not overloaded: "TUINT4Array" shr "ShortInt"
DelphiMD5.pas(237,33) Error: Operator is not overloaded: "TUINT4Array" shr "ShortInt"
DelphiMD5.pas(258,16) Error: Illegal type conversion: "TByteArray" to "LongWord"
DelphiMD5.pas(258,36) Error: Illegal type conversion: "TByteArray" to "LongWord"
DelphiMD5.pas(259,5) Error: Illegal type conversion: "TByteArray" to "LongWord"
DelphiMD5.pas(259,36) Error: Illegal type conversion: "TByteArray" to "LongWord"
DelphiMD5.pas(288,10) Error: Incompatible types: got "TArray4UINT4" expected "LongWord"
DelphiMD5.pas(288,23) Error: Incompatible types: got "TArray4UINT4" expected "LongWord"
DelphiMD5.pas(288,36) Error: Incompatible types: got "TArray4UINT4" expected "LongWord"
DelphiMD5.pas(288,49) Error: Incompatible types: got "TArray4UINT4" expected "LongWord"
DelphiMD5.pas(360,2) Error: Operator is not overloaded: inc "TArray4UINT4"
DelphiMD5.pas(360,2) Error: Incompatible types: got "untyped" expected "TArray4UINT4"
DelphiMD5.pas(361,2) Error: Operator is not overloaded: inc "TArray4UINT4"
DelphiMD5.pas(361,2) Error: Incompatible types: got "untyped" expected "TArray4UINT4"
DelphiMD5.pas(362,2) Error: Operator is not overloaded: inc "TArray4UINT4"
DelphiMD5.pas(362,2) Error: Incompatible types: got "untyped" expected "TArray4UINT4"
DelphiMD5.pas(363,2) Error: Operator is not overloaded: inc "TArray4UINT4"
DelphiMD5.pas(363,2) Error: Incompatible types: got "untyped" expected "TArray4UINT4"
DelphiMD5.pas(461,17) Hint: Local variable "Context" does not seem to be initialized
DelphiMD5.pas(468,33) Hint: Local variable "Buffer" does not seem to be initialized
DelphiMD5.pas(475,17) Hint: Function result variable does not seem to be initialized
DelphiMD5.pas(482,17) Hint: Local variable "Context" does not seem to be initialized
DelphiMD5.pas(484,17) Hint: Function result variable does not seem to be initialized


Ach ja ich hatte in einen Post zuvor erwähnt, dass ich Lazarus verwende und nicht Delphi, für den Fall, dass dies noch nicht bekannt sein sollte und dies den Fehler verursachen sollte. Zudem Schreibe ich das Programm primär unter Linux und anschließend kompiliere ich es noch unter Mac und Windows 10. ...


Hänge mal deinen kompletten Code hier an. Da sehen wir mal wo es Nachholebedarf gibt.
Aber Du wolltest ja, dass ich mal meinen kompletten Code anhänge... Mein Du damit den Code aus meiner LogIn Unit oder das ganze Projekt? Ich füge erstmal nur den der LogIn Unit bei, fall das nicht reicht, dann bitte bescheid sagen....

Code:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, sqldb, db, FileUtil, Forms, Controls, Graphics, Dialogs,
  ComCtrls, ExtCtrls, StdCtrls, Buttons, Menus;

type

  { TForm1 }

  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    CheckBox1: TCheckBox;
    Image1: TImage;
    Benutzer: TLabeledEdit;
    Code: TLabeledEdit;
    MainMenu1: TMainMenu;
    MenuItem1: TMenuItem;
    MenuItem2: TMenuItem;
    StatusBar1: TStatusBar;
    Timer1: TTimer;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure CheckBox1Change(Sender: TObject);
    procedure CodeChange(Sender: TObject);
    procedure CodeKeyPress(Sender: TObject; var Key: char);
    procedure MenuItem2Click(Sender: TObject);
    procedure MenuItem4Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);


  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation
 uses Unit2, Unit3, Unit4;
{$R *.lfm}

{ TForm1 }
//Anzeige DATUM und Uhrzeit in der Statusleiste
procedure TForm1.Timer1Timer(Sender: TObject);
var
  hr, min, sec, msec: Word;

begin
DecodeTime(now, hr, min, sec, msec);
StatusBar1.Panels[1].Text := FormatDateTime ('dd.mm.yyyy, hh:nn:ss', Now);
Form2.StatusBar2.Panels[1].Text := FormatDateTime ('dd.mm.yyyy, hh:nn:ss', Now);
Form3.StatusBar1.Panels[1].Text := FormatDateTime ('dd.mm.yyyy, hh:nn:ss', Now);
Form4.StatusBar1.Panels[1].Text := FormatDateTime ('dd.mm.yyyy, hh:nn:ss', Now);
end;
//Abbruch des Logins und schließen des Programms
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
  form2.close;
end;

// Passworteingabe durch Sternchen ersetzten
procedure TForm1.CodeChange(Sender: TObject);
begin
  Code.PasswordChar := '*';
end;
//Passworteingabe durch Sternchen deaktivieren
procedure TForm1.CheckBox1Change(Sender: TObject);
begin
   if CheckBox1.Checked then
      begin
      Code.PasswordChar := #0;
      end else
      begin
      Code.PasswordChar := '*';
      end
end;

//Mit Enter den LoginButton aktivieren
procedure TForm1.CodeKeyPress(Sender: TObject;
var Key: Char);
begin
  if Key = #13 then begin
    BitBtn1.Click; // or something else
    Key := #0;
  end;
end;

//LoginButton = true Weiterleitung zum MainForm und schließen LoginFenster
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  form3.dbf1.Filtered := false;
  form3.dbf1.Filter := Format('Ben = %s and Code = %s',[QuotedStr(Benutzer.text),QuotedStr(Code.Text)]);
  form3.dbf1.Filtered := true;
  form3.dbf1.First;
  if not form3.dbf1.EoF then begin
    form2.show;
    form1.close;
  end;
  form3.dbf1.Filtered := false;
end;

//Beenden des Programms durch das Mainmenü
procedure TForm1.MenuItem2Click(Sender: TObject);
begin
  form2.close;
end;

procedure TForm1.MenuItem4Click(Sender: TObject);
begin
  form3.showmodal;
end;

end.

Nochmals vielen Dank für die umfangreiche Hilfe, das ist nicht selbstverständlich und vor allem wird es in vielen Foren immer seltener...

Gruß

René
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 08:45 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