4 Stimmen

Speichern von Benutzername/Passwort während der Verarbeitung

Ich arbeite im Kontext einer ASP.NET-Anwendung und erstelle eine Seite, die in der Lage ist, Datenbankskripte gegen eine von vielen Datenbanken in unserer Umgebung auszuführen. Dazu müssen wir den Benutzer zur Eingabe einer Kombination aus Benutzername und Kennwort auffordern; dieser Wert kann problemlos für alle Server verwendet werden.

Die Frage ist, wo diese Informationen am sichersten gespeichert werden können. Wir müssen sie vorübergehend speichern, denn wenn sie auf dieser speziellen Seite sind, könnten sie Hunderte von Skripten über mehrere Postbacks ausführen. Soweit ich das beurteilen kann, habe ich 3 Möglichkeiten, und ich bin mir nicht sicher, welche die beste ist. Hier ist meine Meinung zu den Optionen, was ist die Empfehlung von allen hier? Was ist das sicherste und gleichzeitig benutzerfreundlichste?

Informationen zum Laden im Viewstate

Eine der ersten Ideen, die wir diskutierten, war die Speicherung der Informationen nach der Eingabe durch den Benutzer im ViewState für die Seite. Dies ist hilfreich, da die Informationen nur für die Lebensdauer der Seite vorhanden sind, allerdings sind wir uns über die Sicherheitsauswirkungen unsicher.

Informationen in der Sitzung speichern

Der nächste Gedanke, den wir hatten, war, sie in einer Sitzung zu speichern. Der Nachteil dabei ist jedoch, dass die Informationen anderen Seiten innerhalb der Anwendung zur Verfügung gestellt werden können und die Informationen immer im Speicher des Servers verbleiben.

Informationen in der Anwendung speichern

Die letzte Idee, die wir hatten, war, sie im Anwendungscache zu speichern, mit einem benutzerspezifischen Schlüssel und einem gleitenden 5-Minuten-Ablauf. Dies würde anderen Seiten immer noch zur Verfügung stehen, aber es würde sicherstellen, dass die Informationen für einen kürzeren Zeitraum zwischengespeichert werden.

Und warum?

Die letzte Frage, die wichtig ist, lautet: "Warum machen Sie das?". Warum verwenden wir nicht einfach ihre Lan-IDs? Nun, wir können keine Lan-IDs verwenden, da das Netzwerk keine Unterstützung für die Delegation bietet.

S0 Was ist die empfohlene Lösung? Warum? Wie sicher ist sie, und können wir das sein?

Update

Es wurden zahlreiche Informationen besprochen. Zur Klarstellung: Wir arbeiten in einer Intranet-Umgebung und können aufgrund von Einschränkungen im Netzwerk weder Impersonation noch Delegation verwenden.

3voto

Tomalak Punkte 320467

Meiner Meinung nach ist der natürliche Ort dafür die Sitzung.

Ich bin mir nicht sicher, warum Sie sich vor "anderen Seiten innerhalb der Anwendung" fürchten (Sie kontrollieren die Anwendung, nicht wahr?), aber wenn Sie das wirklich tun, könnten Sie eine Art Verschlüsselung verwenden, bevor Sie sie speichern.

Aber wenn Sie etwas tun wollen dass können die Daten auch im ViewState gespeichert werden.

3voto

John MacIntyre Punkte 12808

Mir gefällt keine dieser Ideen, aber Ich hasse die Idee des Viewstate total .

Ich weiß nicht, wie viele Datenbanken Sie anhängen, aber wenn es eine begrenzte Anzahl ist, frage ich mich, ob Sie Ihre Authentifizierung und Autorisierung auf eine standardmäßige, sichere Weise handhaben und sich dann mit diesen Datenbanken über integrierte Sicherheit durch Identitätsnachahmung mit einem Konto, das nur minimale Berechtigungen hat.

1voto

mmx Punkte 400975

El ViewState Ansatz ist gut, hat aber das Problem, dass Sie den Benutzernamen und das Passwort an den Kunden weitergeben. Selbst wenn Sie sie verschlüsseln, ist die Situation nicht sehr gut, wenn ein Angreifer den Verschlüsselungsschlüssel hat.

Bezüglich der Session y Application Ansätze, ich glaube nicht, dass Application Ansatz ist sinnvoll. Daten sind benutzerspezifisch, daher Session sollte der richtige Weg sein. Es wird verschwinden, sobald die Sitzung des Benutzers geschlossen wird. Übrigens, wenn Sie es auf dem Server speichern möchten, verwenden Sie SecureString Klasse.

1voto

Alejandro Mezcua Punkte 1213

Wie John MacIntyre schrieb, sollten Sie hierfür integrierte Sicherheit und Impersonation verwenden.

Wenn Sie es aus irgendeinem Grund nicht verwenden können und Ihre eigene Anmeldeseite bereitstellen wollen, verwenden Sie auf jeden Fall SSL, um den Datenverkehr zwischen dem Browser und Ihrem Server zu verschlüsseln. Die Verwendung des ViewState-Ansatzes ist ebenfalls völlig unsicher, wenn Sie kein SSL verwenden; es gibt Tools, mit denen Sie die Inhalte sehr einfach einsehen können. Von den von Ihnen aufgezählten Methoden ist die beste die Verwendung des Session-Status. Sie können das Speichern des Sitzungsstatus aus dem Speicher Ihres Webservers auslagern und diese Daten in einer Datenbank die Sie auf die gewünschte Weise sichern können. Wenn Ihnen das nicht gefällt, können Sie auch Ihre eigene Version schreiben Session-Status-Anbieter und wenden Sie dort die erforderliche Sicherheit an.

0voto

ScottS Punkte 8295

Die Speicherung in Viewstate erhöht Ihre Gefährdung, da das Kennwort immer wieder im Internet kursiert. Es liegt an Ihnen, ob die Verschlüsselung gut genug ist, um diesem Risiko zu begegnen.

Bei der Verwendung von Application oder Session bleibt das Passwort auf dem Server. Wie bereits erwähnt, wird SecureString verhindern, dass Passwörter einfach aus dem Speicher ausgelesen werden. Session lässt sich für mehr Benutzer und, was wahrscheinlich noch wichtiger ist, für mehrere Server viel einfacher skalieren als Application. Wenn Sie nicht sicher sind, dass Sie nie mehr als einen Webserver verwenden werden, würde ich Application nicht verwenden, da es an Ihnen liegt, alle Server zu synchronisieren.

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