In meiner WPF-Anwendung möchte ich Administratoren eine Datenbankverbindung mit integrierter Sicherheit für verschiedene andere Benutzer testen können. Also habe ich ein Formular, das es dem Administrator erlaubt, die Domain, den Benutzernamen und das Passwort einzugeben und es dann zu testen. Ich bin in der Lage, sicher bis das Passwort zu behandeln, bis ich LogonUser
im advapi32.dll
nennen, die eine string password
Sichere Windows Identitätswechsel?
LogonUser(UserName, Domain, Password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref UserHandle)
nimmt ich eine Nutzenfunktion geschrieben haben, die die Secure in einen String konvertiert so sicher wie möglich, und dann im rufenden es auf dem Passwort in dem Logonuser Aufruf:
LogonUser(UserName, Domain, Helper.ConvertSafely(Password), LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref UserHandle)
Da die Signatur für Logonuser einen String, es sei denn, Logonuser in seiner Ausführung der richtige Pflege des Passworts nehmen, könnte es auf meinem Call-Stack im Klartext sein noch nach Der Anruf kehrt zurück. Gibt es einen sichereren Weg, sich als ein Benutzer auszugeben, in dem ich vertraulich sein kann, dass das PW die ganze Zeit sicher ist?
Grundsätzlich brauche ich nur WindowsImpersonationContext
, aber ich möchte es ohne das Passwort jemals im Klartext erwerben.
Ich habe Ihren Titel bearbeitet. Bitte lesen Sie "[Sollten die Fragen" Tags "in ihren Titeln enthalten?] (Http://meta.stackexchange.com/questions/19190/)", wobei der Konsens "nein, sie sollten nicht" lautet. –
Gute Frage, eigentlich. Wenn Sie sich jedoch ernsthaft Sorgen um die Sicherheit machen, schlage ich vor, dass Sie auch nichttechnische Sicherheitslücken in Betracht ziehen: Ihre Administratoren dürfen keine Kenntnisse über die Kennwörter Ihrer Benutzer haben oder benötigen. Die Tatsache, dass Sie einen Benutzernamen/Passwort-Bildschirm erstellen, legt nahe, dass die Administratoren Anmeldeinformationen eingeben. Das scheint mir sehr falsch zu sein. (Und wenn es nicht Admins sind, sondern die Benutzer selbst, die ihre Anmeldeinformationen ausfüllen, dann "runas" die Anwendung zuerst unter ihrem eigenen Login, und Sie müssen keinen Identitätswechsel durchführen.) – stakx
Wird nicht das ursprüngliche Formular-Eingabefeld verwendet sowieso eine reguläre Zeichenfolge? Möglicherweise möchten Sie auch Ihren 'LogonUser'-Code mit meiner [SimpleImpersonation] (https://github.com/mj1856/SimpleImpersonation) -Bibliothek vereinfachen, wie [hier] beschrieben (http://stackoverflow.com/a/7250145)/634824). Obwohl ich 'SecureString' dort auch nicht verwende. –