Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Passwort Char umgangen (https://www.delphipraxis.net/204702-passwort-char-umgangen.html)

haentschman 20. Jun 2020 08:29

Passwort Char umgangen
 
Moin...:P

Das wollte ich schon lange mal fragen... :wink:
In der Firma hat ein Mitarbeiter ein Tool installiert (Name?), womit die Password Felder im Klartext angezeigt werden. Das betrifft auch meine TEdit. :shock:
Kann man das verhindern?

PS: Klar sind die im Edit im Klartext und nur für die Oberfläche mit * sichtbar. Aber das hebelt ja das "System" aus.

Danke...:wink:

Delphi.Narium 20. Jun 2020 08:59

AW: Passwort Char umgangen
 
Nur 'ne grobe Idee:

'nen Nachfahren von TEdit bauen, der ein zusätzliches Attribut Passwort (oder sowas) erhält.

Bei der Eingabe von Zeichen wird die Übertragung der Zeichen in das Textattribut auf das neue Attribut umgeleitet und in das Textattribut der Stern geschrieben.

Dort, wo bisher das Textattribut gelesen wurde, wird nun das neue Attribut gelesen.

Oder im OnChange des Edits die Zeichen abfangen und in 'ne (globale) Variabel, ein Attribut des Formulars, ... schreiben und ins Edit immer nur 'nen * schreiben. Statt des Textattributes dann die "Abfangvariabel" lesen.

jaenicke 20. Jun 2020 09:34

AW: Passwort Char umgangen
 
Du kannst eine Komponente von TEdit ableiten und dort z.B. WM_GETTEXT abfangen:
https://stackoverflow.com/a/37929877

Allerdings lesen manche Tools auch den Speicher aus und versuchen das Passwort-Zeichen zu überschreiben usw., so dass eine komplett eigene (selbst gezeichnete) Komponente, die nicht von TEdit abgeleitet ist, am sichersten wäre.

Hobbycoder 20. Jun 2020 09:54

AW: Passwort Char umgangen
 
Warum das Passwort überhaupt in das Edit laden?

Ich lade in den Forms immer nur ein Pseudo-Passwort. Das könnte man ruhig auslesen, würde aber nicht funktionieren.
Die Edit-controls werden nur für Neueingabe verwendet. Und da der User, der sie eingibt ja dann vor dem Rechner sitzt und ja sowieso weiß, was er eingibt, wäre zu dem Zeitpunkt ein Auslesen eigentlich egal.

Es gibt lediglich den Zeitraum nach der Eingabe in das Edit-Feld bis zum Schließen der Form. Wenn der User dann den Arbeitsplatz verläßt, könnte ein anderer das Kennwort auslesen.

jaenicke 20. Jun 2020 10:26

AW: Passwort Char umgangen
 
Zitat:

Zitat von Hobbycoder (Beitrag 1467843)
Es gibt lediglich den Zeitraum nach der Eingabe in das Edit-Feld bis zum Schließen der Form. Wenn der User dann den Arbeitsplatz verläßt, könnte ein anderer das Kennwort auslesen.

Du vergisst, dass manche dieser Tools auch im Hintergrund laufen und jegliche Eingabe in solchen speziellen Feldern aufzeichnen. Wenn man ein Feld verwendet, das nicht als solches erkennbar ist, erschwert man solche Angriffe. Denn jegliche Tastatureingaben als Passwort zu probieren oder versuchen zu identifizieren oder ähnliches wäre natürlich sehr aufwendig und daher für die breite Masse an Angriffen nicht denkbar.

Dass man vorhandene Passwörter nicht bei einem Aufruf des Formulars zum Ändern in ein solches Textfeld lädt, ist klar. Im Normalfall liegt ein solches Passwort aber auch gar nicht vor (sondern nur als Hash), wenn es nicht gerade um gespeicherte Logindaten für ein Fremdsystem wie in einem FTP-Tool geht.

haentschman 20. Jun 2020 10:41

AW: Passwort Char umgangen
 
Danke erstmal...:P
Zitat:

Du vergisst, dass manche dieser Tools auch im Hintergrund laufen und jegliche Eingabe in solchen speziellen Feldern aufzeichnen.
...eben. Das besagte Tool nimmt eigentlich nur die Sternchen weg...auch während der Eingabe. :evil:
Zitat:

Die Edit-controls werden nur für Neueingabe verwendet
Irgendwann muß man das Password eingeben (Login etc.)

Mich hatte nur verwundert, daß mein in der EXE "gespeichertes" Edit manipuliert wird. (Sternchen weg)

Delphi.Narium 20. Jun 2020 11:28

AW: Passwort Char umgangen
 
Für die Eingabe kann man auch das OnKey-irgendwasereignis des Formulars nehmen, das Passwort in 'ne Variabel stecken und in 'nem Label, 'nem (ansonsten völlig funktionslosen) Edit jeweils 'nen Stern ausgeben oder was anderes oder aber auch garnix: Sprich: Im Formular nur die Zeichen annehmen und bei #13 oder 'nem passenden Buttonklick die Eingabe als beendet betrachten. #9 nimmt das letzte Zeichen aus der Eingabe wieder weg, falls mal wer das letzte Zeichen korrigieren will, möchte, muss oder so ..., #27 schließt das Formular und bricht den Anmeldevorgang ab.

Wenn Anwender meinen, sie müssten die Eingabe mit irgendwelchen "externen Tools" überwachen, kann man sie die Eingabe auch in 'nem absoluten Blindflug machen lassen.

Oder: Zeichen eingegeben, piiieeept der Lautsprecher als Hinweis: "Zeichen ist angekommen", aber keine optische Anzeige dazu machen, oder in 'nem Label einfach nur die Anzahl der bisher eingegebene Zeichen anzeigen. Wer weiß, dass sein Passwort zwölf Zeichen lang ist, weiß dann, wenn er dort die zwölf sieht, dass er zwölf Zeichen eingegeben hat und damit wohl die Passworteingabe abgeschlossen ist. Er kann dann den Anmeldebutton drücken (oder es auch sein lassen ;-))

Und Copy&Paste oder Tools zum automatischen Ausfüllen, ... funktionieren bei sowas dann auch nicht (mehr) (hoffentlich ;-)).

Uwe Raabe 20. Jun 2020 11:54

AW: Passwort Char umgangen
 
Zitat:

Zitat von haentschman (Beitrag 1467846)
Mich hatte nur verwundert, daß mein in der EXE "gespeichertes" Edit manipuliert wird. (Sternchen weg)

Du muss nur irgendwie an das Handle des Edits kommen, dann kannst du das mit EM_SETPASSWORDCHAR ausschalten.

haentschman 20. Jun 2020 12:07

AW: Passwort Char umgangen
 
Zitat:

Du muss nur irgendwie an das Handle des Edits kommen, dann kannst du das mit EM_SETPASSWORDCHAR ausschalten.
...dämlich. :evil:

DeddyH 20. Jun 2020 12:11

AW: Passwort Char umgangen
 
Nunja, das TEdit dürfte das ja genauso machen.

Andreas13 20. Jun 2020 12:59

AW: Passwort Char umgangen
 
Wie wäre es mit der Vorgehensweise ganz nach dem Prinzip: Ein Paßwort kann über das Handle des Edits und EM_SETPASSWORDCHAR nicht abgefangen werden, wenn man es gar nicht eingibt. Also das Paßwort auf einem USB-Dongle ablegen und zum Identifizieren des Users den Dongle kurz in den USB-Slot stecken lassen.
Meine Idee ist bestimmt einfältig und umständlich...
Andreas

Uwe Raabe 20. Jun 2020 13:52

AW: Passwort Char umgangen
 
Zitat:

Zitat von haentschman (Beitrag 1467839)
Kann man das verhindern?

Warum willst du das denn überhaupt verhindern?

Ich würde sogar noch weiter gehen und dem Benutzer direkt in deinem Programm eine Möglichkeit geben, das Passwort sichtbar zu machen - und wenn auch nur temporär für die jeweilige Eingabe. Wie oft habe ich mich schon über ein falsches Passwort gewundert, nur weil Caps-Lock eingeschaltet war oder das Tastaturlayout auf einer falschen Sprache stand. Das wäre alles sofort ersichtlich, wenn man das eingegebene Passwort sehen könnte. Wer das Passwort nicht sichtbar haben will, der lässt es eben bei den Sternchen.

haentschman 20. Jun 2020 14:23

AW: Passwort Char umgangen
 
Zitat:

Warum willst du das denn überhaupt verhindern?
Das war nur zur Info. :P Ich hoffte, daß das einfach zu verhindern ist. Wenn ich mal so kritische Bereiche habe, weiß ich was zu tun ist. :zwinker: Ich muß nur mal über alle drübergucken, was wo drin steht und auslesbar ist, aber nicht soll.

jziersch 20. Jun 2020 14:44

AW: Passwort Char umgangen
 
Hier der code einer einfachen aber sicheren Passwort Eingabekomponente.
Da es nicht von TEdit abstammt kann man es auch nichts auslesen.

Code:
type
  TWPGeheim = class(TCustomControl)
  private
    FText : String;
  protected
    procedure CreateParams(var Params: TCreateParams); override;
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState;X, Y: Integer); override;
  public
    procedure Paint; override;
    procedure KeyPress(var Key: Char); override;
    property Text : String read FText write FText;
  end;

{ TWPGeheim }

procedure TWPGeheim.KeyPress(var Key: Char);
begin
  if Key=#8 then FText := Copy(FText,1,Length(FText)-1)
  else if Key>#32 then FText := FText + Key;
  invalidate;
end;

procedure TWPGeheim.MouseDown(Button: TMouseButton; Shift: TShiftState; X,
  Y: Integer);
begin
  inherited;
  SetFocus;
end;

procedure TWPGeheim.Paint;
var s : string;
    i : Integer;
begin
  inherited;
  if Focused then
       Canvas.Font.Color := clHighlight
  else Canvas.Font.Color := clWindowText;
  SetLength(s, Length(FText));
  for I := 1 to Length(s) do s[i] := '*';
  Canvas.TextOut( 1,1,s);
end;

procedure TWPGeheim.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.Style := Params.Style or WS_BORDER or WS_TABSTOP;
end;
Kann man natürlich erweitern, z.b. um CTRL+V für Einfügen zu unterstützen:

Code:
procedure TWPGeheim.KeyPress(var Key: Char);
begin
  if Key=#8 then FText := Copy(FText,1,Length(FText)-1)
  else if Key>#32 then FText := FText + Key
  else if Key=Char(22) then // ^V
  begin
    Clipboard.Open;
    try
     SetLength(FText,30);
     SetLength(FText,Clipboard.GetTextBuf(PChar(FText),30));
    finally
     Clipboard.Close;
    end;
  end;
  invalidate;
end;

TurboMagic 20. Jun 2020 20:52

AW: Passwort Char umgangen
 
Warum nicht einfach per Timer alle paar MS selber die EM_SETPASSWORDCHAR Nachricht an das betreffende Edit schicken?
Dann kann das Tool daas ruhig mal ausschalten, gleich danach ist's halt wieder an ;-)

jziersch 22. Jun 2020 19:07

AW: Passwort Char umgangen
 
Zitat:

Zitat von TurboMagic (Beitrag 1467890)
Warum nicht einfach per Timer alle paar MS selber die EM_SETPASSWORDCHAR Nachricht an das betreffende Edit schicken?
Dann kann das Tool das ruhig mal ausschalten, gleich danach ist's halt wieder an ;-)

Das sollte nicht viel helfen wenn das Tool mit GETTEXT den text selber ausliest. Diese passwort eingabe Felder rufen eigentlich nur nach Missbrauch, auch für tools die einfach alle möglichen Zeichen ausprobieren.


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