8 Stimmen

Wie unterstützen Sie eine Webanwendung mit gehashten oder verschlüsselten Kennwörtern?

Bei der Unterstützung einer neuen Webanwendung in einer Unternehmensumgebung ist es oft notwendig, sich als ein bestimmter Benutzer anzumelden, um ein tatsächliches oder vermeintliches Problem zu diagnostizieren, das dieser hat. Hier gibt es zwei gegensätzliche Probleme:

  1. Die beste Praxis ist die Verwendung von gehashte oder verschlüsselte Passwörter , nicht im Klartext. Manchmal ist ein SSO (Single Sign-On) eines Drittanbieters dazwischengeschaltet. Es gibt keine Möglichkeit, das Passwort des Benutzers abzurufen. Es gibt keine Möglichkeit, sich als dieser Benutzer anzumelden, es sei denn, der Benutzer gibt es an (was nicht erwünscht ist).

  2. Viele Webanwendungen haben Personalisierung und komplexe Autorisierung . Verschiedene Benutzer haben unterschiedliche Rollen (Admin, Manager, Benutzer) mit unterschiedlichen Berechtigungen. Manchmal können Benutzer nur ihre Daten sehen - ihre Kunden oder Aufgaben. Einige Benutzer haben nur Lesezugriff, während andere bearbeiten können. Somit ist die Ansicht der Webanwendung für jeden Benutzer einzigartig.

Nehmen wir an, dass es in einer Unternehmensumgebung nicht möglich ist, zum Schreibtisch des Benutzers zu gehen oder eine direkte Verbindung zu seinem Rechner herzustellen.

Wie gehen Sie mit dieser Situation um?

Edit: Ich möchte noch einmal betonen, dass es in einem großen Finanzinstitut oder einem typischen Fortune-500-Unternehmen mit Hunderttausenden von Mitarbeitern im ganzen Land und auf der ganzen Welt nicht möglich ist, dass ein einfacher Entwickler in einer IT-Abteilung direkt auf den Rechner eines Benutzers zugreifen kann. Bei einigen dieser Anwendungen handelt es sich um öffentliche Webanwendungen, die von Kunden genutzt werden (z. B. Online-Banking und Aktienhandel). Und viele dieser Intranet-Anwendungen basieren auf Active Directory oder SSO, was bedeutet, dass die Benutzeranmeldedaten für viele Anwendungen gleich sind. Ich danke Ihnen allen für Ihre Vorschläge, von denen einige auch in anderen Umgebungen sehr nützlich sein können.

19voto

Ned Batchelder Punkte 342778

Einige dieser Ideen belasten den Benutzer, indem sie ihn zwingen, sein Kennwort zu ändern, oder indem sie seinen Desktop für Ihre Debugging-Sitzung belegen.

Die Idee von Markc ist die beste: Erweitern Sie Ihre Authentifizierungslogik so, dass sich Superuser als ein bestimmter Benutzer anmelden können, indem Sie nicht die Anmeldedaten des Benutzers, sondern den Namen des Benutzers und seine Superuser-Anmeldedaten angeben.

Ich habe es in der Vergangenheit so gemacht (pseudo-ish Python):

if is_user_authenticated(username, userpassword):
    login the user
else if ':' in userpassword:
    supername, superpassword = userpassword.split(':')
    if is_superuser_authenticated(supername, superpassword):
        login the user

Mit anderen Worten, wenn der Benutzername und das Kennwort nicht authentifiziert werden und das Kennwort einen Doppelpunkt enthält, handelt es sich in Wirklichkeit um den Administrator-Benutzernamen und das Administrator-Kennwort, die durch einen Doppelpunkt verbunden sind, also melden Sie sich mit dem Benutzernamen an, wenn es sich um den richtigen Administrator-Benutzernamen und das richtige Passwort handelt.

Das bedeutet, dass Sie sich als Benutzer anmelden können, ohne dessen Geheimnisse zu kennen und ohne ihn zu belästigen.

5voto

Noah Goodrich Punkte 24212

Für unsere Webanwendungen verwenden wir einen Prozess, der in Ermangelung eines besseren Begriffs als "Hijacking" eines Benutzerkontos definiert wird.

Im Grunde können Administratoren das Konto eines Benutzers mit einem einfachen Mausklick "entführen". Im Code verwenden Sie einfach einen eindeutigen Bezeichner (in einer weniger sicheren Umgebung funktioniert die Benutzer-ID), der dann die erforderlichen Anmeldeinformationen in der Sitzung festlegt, so dass sie dann im Profil des Benutzers arbeiten können. In einer sichereren Umgebung könnten Sie einen eindeutigen Hash für jeden Benutzer verwenden.

Um zu gewährleisten, dass diese Hijack-Methode sicher ist, wird immer zuerst überprüft, ob die Anfrage von einem authentifizierten Administrator mit den entsprechenden Rechten gestellt wird. Aus diesem Grund muss entweder die Sitzung des Administrators gekapert oder seine Authentifizierungsdaten abgefangen werden, damit jemand die Hijack-Funktion innerhalb der Anwendung ausnutzen kann.

2voto

Markc Punkte 1011

Ich hatte 4 Ideen. Während ich tippte, wurden 3 von ihnen bereits vorgeschlagen (also habe ich sie hochgestuft)

Variante von Idee 3 - Nachahmung:

Um dies mit minimalen Code-Änderungen so "identisch wie möglich" mit einer normalen Anmeldung zu machen, könnten Sie die Möglichkeit hinzufügen, sich direkt bei der Anmeldung als Admin auszugeben, indem Sie die Admin-Zugangsdaten und einen alternativen Benutzernamen angeben, z. B. Anmeldung als Admin:user, adminpassword. Das System würde dies genauso behandeln wie die Anmeldung als user mit userpassword.

Idee 4: Können Sie auf den Kennwortspeicher zugreifen? Wenn ja, ersetzen Sie den Hash des Benutzers vorübergehend durch den Hash eines bekannten Kennworts. (Die Passwörter sind oft online in einer Datenbank gespeichert. Ein SQL-Query-Tool kann die Vertauschung vornehmen)

1voto

Matt Brunell Punkte 9892

Ein Administrator sollte die Möglichkeit haben, das Passwort eines Benutzers zu ändern. Ändern Sie das Passwort des Benutzers in ein Ihnen bekanntes Passwort. Sie können sich dann als dieser Benutzer anmelden.

Sagen Sie dem Benutzer, dass er sein Passwort zurücksetzen soll, wenn Sie mit der Fehlersuche fertig sind.

1voto

fwzgekg Punkte 291

In der Regel durch eine Art Fernsteuerungssoftware, mit der man den Desktop sehen kann. Wenn sie sich auf einem Windows-Terminalserver befinden, können die eingebauten Verwaltungstools dafür verwendet werden. Ansonsten würde ich etwas wie VNC über ein internes Netzwerk oder einen externen Dienst wie LogMeIn ( http://www.logmein.com/ ).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X