![]() |
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: |
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. |
AW: Passwort Char umgangen
Du kannst eine Komponente von TEdit ableiten und dort z.B. WM_GETTEXT abfangen:
![]() 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. |
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. |
AW: Passwort Char umgangen
Zitat:
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. |
AW: Passwort Char umgangen
Danke erstmal...:P
Zitat:
Zitat:
Mich hatte nur verwundert, daß mein in der EXE "gespeichertes" Edit manipuliert wird. (Sternchen weg) |
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 ;-)). |
AW: Passwort Char umgangen
Zitat:
![]() |
AW: Passwort Char umgangen
Zitat:
|
AW: Passwort Char umgangen
Nunja, das TEdit dürfte das ja genauso machen.
|
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 |
AW: Passwort Char umgangen
Zitat:
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. |
AW: Passwort Char umgangen
Zitat:
|
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:
Kann man natürlich erweitern, z.b. um CTRL+V für Einfügen zu unterstützen:
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;
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; |
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 ;-) |
AW: Passwort Char umgangen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:25 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 by Thomas Breitkreuz