Results 1 to 2 of 2

Thread: Stelen van paswoord uit een TEdit voorkomen

  1. #1
    Senior Member PsychoMark's Avatar
    Join Date
    Nov 2001
    Location
    Raamsdonksveer
    Posts
    10,269

    Stelen van paswoord uit een TEdit voorkomen

    Omschrijving

    De standaard TEdit heeft een PasswordChar property waarmee je de tekens kan verbergen. Ondanks pogingen van Microsoft om deze beter te beveiligen tegen standaardtechnieken is dit niet gelukt, en ook vrijwel onmogelijk vanwege de manier waarom windows componenten werken. TProtectedEdit beveiligd TEdit zodat externe applicaties het paswoord niet kunnen bekijken. Hiervoor vangt het een aantal berichten af, geeft foutieve waarden terug, en slaat in plaats daarvan de tekst lokaal op.


    Opmerkingen

    Deze code wijkt enigzins af van de versie die ik hier gepost heb, de vorige versie gaf namelijk problemen als de gebruiker eenmaal de tekst had gewijzigd. Deze versie is volledige getest, alle data wordt binnen het component gehouden, Windows denkt dat de tekst in de edit daadwerkelijk '****' is, dus hiermee voorkom je effectief dat andere applicaties bij je data kunnen via standaard-methoden...

    Er kunnen misschien nog kleine fouten in zitten, heb nog niet zorgvuldig getest hoe het component zich gedraagd buiten de standaard functionaliteit in de applicatie zelf, maar mochten er problemen zijn hoor ik het wel


    Code

    Code:
    uses
      Messages,
      Classes,
      StdCtrls;
    
    type
      TProtectedEdit  = class(TEdit)
      private
        FText:      String;
    
        procedure SetText(const Value: String);
      protected
        procedure KeyPress(var Key: Char); override;
        procedure KeyDown(var Key: Word; Shift: TShiftState); override;
    
        procedure WMCopy(var Msg: TWMCopy); message WM_COPY;
        procedure WMCut(var Msg: TWMCut); message WM_CUT;
        procedure WMPaste(var Msg: TWMPaste); message WM_PASTE;
      published
        property Text:    String  read FText  write SetText;
      end;
    
    implementation
    
    { TProtectedEdit }
    procedure TProtectedEdit.KeyDown(var Key: Word; Shift: TShiftState);
    var
      iLength:      Integer;
    
    begin
      inherited;
    
      if PasswordChar <> #0 then
        if Shift = [] then
          case Key of
            VK_DELETE:
              begin
                if SelLength = 0 then
                  iLength := 1
                else
                  iLength := SelLength;
    
                Delete(FText, SelStart + 1, iLength);
              end;
        end
      else
        FText := inherited Text;
    end;
    
    procedure TProtectedEdit.KeyPress(var Key: Char);
    var
      iPos:     Integer;
    
    begin
      inherited;
    
      if PasswordChar <> #0 then
        case Ord(Key) of
          VK_BACK:        SetLength(FText, Length(FText) - 1);
          VK_DELETE:      Delete(FText, SelStart, SelLength);
        else
          iPos  := SelStart;
    
          if SelLength > 0 then
            Delete(FText, iPos + 1, SelLength);
    
          FText := Copy(FText, 1, iPos) + Key + Copy(FText, iPos + 1, MaxInt);
        end
      else
        FText := inherited Text;
    end;
    
    procedure TProtectedEdit.SetText(const Value: String);
    begin
      FText := Value;
    
      if Self.PasswordChar <> #0 then
        inherited Text  := StringOfChar(Self.PasswordChar, Length(Value))
      else
        inherited Text  := Value;
    end;
    
    
    procedure TProtectedEdit.WMCopy(var Msg: TWMCopy);
    begin
      if PasswordChar = #0 then
        inherited;
    end;
    
    procedure TProtectedEdit.WMCut(var Msg: TWMCut);
    begin
      if PasswordChar = #0 then
        inherited;
    end;
    
    procedure TProtectedEdit.WMPaste(var Msg: TWMPaste);
    begin
      if PasswordChar = #0 then
        inherited;
    end;
    Qui custodiet ipsos custodes

  2. #2
    Senior Member PsychoMark's Avatar
    Join Date
    Nov 2001
    Location
    Raamsdonksveer
    Posts
    10,269
    Ter toevoeging; deze component is nog niet geheel waterdicht. Voor de hele discussie, zie: http://www.nldelphi.com/forum/showth...3204#post23204
    Last edited by PsychoMark; 06-Jan-03 at 10:17.
    Qui custodiet ipsos custodes

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •