Sichern der Mitgliedschaft

Aktualisiert: November 2007

Die ASP.NET-Mitgliedschaft bietet Funktionen zur Verwaltung und Authentifizierung von Benutzern. Am häufigsten wird sie mit der Formularauthentifizierung und mit Authentifizierungssteuerelementen verwendet, z. B. den Steuerelementen Login, LoginView, LoginStatus, LoginName, PasswordRecovery und CreateUserWizard. In diesem Thema wird erläutert, wie Sie die Sicherheit der Mitgliedschaftsfunktion durch optimale Vorgehensweise bei der Konfiguration einer Website und durch Codierung der Mitgliedschaftsklassen erhöhen können.

Die Sicherheit der Anwendung kann zum einen durch solche optimalen Vorgehensweisen verbessert werden. Zum anderen ist ebenfalls wichtig, dass Sie den Anwendungsserver auf dem aktuellsten Stand halten und immer die neuesten Sicherheitspatches für Microsoft Windows und Internetinformationsdienste (IIS) installieren. Das gilt ebenso für Patches für Microsoft SQL Server und weitere Datenquellen hinsichtlich der Mitgliedschaft.

Ausführlichere Informationen über optimale Vorgehensweisen beim Schreiben von Code und bei der Sicherung von Anwendungen finden Sie in dem Buch "Writing Secure Code" von Michael Howard und David LeBlanc. Ebenso finden Sie in der Anleitung "Patterns and Practices" von Microsoft weitere Informationen zu diesem Thema (https://www.microsoft.com/resources/practices/default.mspx).

Sichere Mitgliedschaftskonfiguration

Die Mitgliedschaftsfunktion wird standardmäßig für ASP.NET-Anwendungen aktiviert und kann nicht deaktiviert werden. Die Standardkonfigurationseinstellungen sind auf die sichersten Werte festgelegt. Informationen über Mitgliedschaftskonfigurationseinstellungen und deren Standardwerte finden Sie unter membership-Element (ASP.NET-Einstellungsschema). Sie sollten das requiresQuestionAndAnswer-Attribut auf true festlegen. Dies bietet sich insbesondere dann an, wenn enablePasswordReset oder enablePasswordRetrieval auch auf true festgelegt sind.

Sichern von Konfigurationswerten

Werden vertrauliche Informationen in einer Konfigurationsdatei einer Anwendung gespeichert, sollten Sie die vertraulichen Werte mithilfe der geschützten Konfiguration verschlüsseln. Besonders vertrauliche Informationen enthalten die Verschlüsselungsschlüssel, die im machineKey-Konfigurationselement gespeichert sind, und die Verbindungszeichenfolgen einer Datenquelle, die im connectionStrings-Konfigurationselement gespeichert sind. Weitere Informationen finden Sie unter Verschlüsseln von Konfigurationsinformationen mithilfe der geschützten Konfiguration.

Sichere Verschlüsselungsschlüssel und Hashverfahren

Es wird dringend empfohlen, die Benutzerkennwörter in der Mitgliedschaftsdatenquelle durch Festlegen eines passwordFormat-Attributs auf Hashed oder Encrypted zu verschlüsseln. Hashed ist in diesem Fall das sicherste Format. Die Werte des Verschlüsselungsschlüssel für den angegebenen Verschlüsselungsalgorithmus sind im machineKey-Konfigurationselement gespeichert. Geben Sie für eine sichere Verschlüsselung einen Verschlüsselungsschlüssel an, dessen Wert in der entsprechenden Länge des ausgewählten Verschlüsselungsalgorithmus nach dem Zufallsprinzip generiert wurde.

Auf einem Server mit mehreren Anwendungen empfiehlt es sich, für jede Anwendung einen eindeutigen Verschlüsselungsschlüssel zu definieren. Eine weniger sichere Alternative wäre, einen einzigen Verschlüsselungsschlüssel zu definieren und die IsolateApps-Option mit dem Schlüssel anzugeben.

Sie können die programmgesteuerte Konfiguration auf einem Hostserver so festlegen, dass den Anwendungen ein Überschreiben der Konfigurationseinstellungen verweigert wird. Ebenfalls verweigert wird die Möglichkeit, Verschlüsselungsschlüssel in der Web.config-Datei einer Anwendung neu definieren zu können.

Sichern der Verbindungen zu einer Mitgliedschaftsdatenquelle

Verbindungszeichenfolgen

Damit die Verbindung zum Datenbankserver sicher bleibt, sind die Informationen über Verbindungszeichenfolgen mithilfe der geschützten Konfiguration zu verschlüsseln. Weitere Informationen finden Sie unter Verschlüsseln von Konfigurationsinformationen mithilfe der geschützten Konfiguration.

Herstellen einer Verbindung zu einem SQL Server mithilfe der integrierten Sicherheit

Verbindungen zu SQL Servern sollten Sie mithilfe der integrierten Sicherheit herstellen. Auf diese Weise vermeiden Sie, dass die Verbindungszeichenfolge entdeckt und die Benutzer-ID sowie das Kennwort offengelegt werden. Wenn Sie eine Verbindung angeben, die die integrierte Sicherheit zur Verbindung mit einem SQL Server verwendet, wird die Mitgliedschaftsfunktion auf die Identität des Prozesses zurückgesetzt. Stellen Sie sicher, dass die Identität des Prozesses, der ASP.NET ausführt (z. B. der Anwendungspool), das standardmäßige Prozesskonto oder ein eingeschränktes Benutzerkonto ist. Weitere Informationen finden Sie unter Identitätswechsel in ASP.NET.

SQL Server-Datenbankberechtigungen

Die SQL Server-Datenbank, in der die Benutzerinformationen für Mitgliedschaften gespeichert sind, umfasst Datenbankrollen und Ansichten. Mit diesen kann der Benutzerzugriff auf die erforderlichen Funktionen und notwendige Sichtbarkeit beschränkt werden. Einer Benutzer-ID zur Verbindung mit einer SQL Server-Mitgliedschaftsdatenbank sollte nur ein Minimum an erforderlichen Berechtigungen zugewiesen werden. Weitere Informationen finden Sie unter Rollen und Ansichten in der Datenbank für die Anwendungsdienste für SQL Server.

Workerprozessidentität für SQL Server Express

SQL Server Express 2005 enthält einen neuen Betriebsmodus, der einen Workerprozess starten kann, der die Identität des sich verbindenden Benutzers aufweist. Dieser Modus heißt "als Benutzer ausführen"-Modus. Der Betriebsmodus eignet sich für die Entwicklung von Desktopanwendungen unter IIS, ist jedoch nicht geeignet für das Starten des Workerprozesses auf Webservern, auf denen sich mehrere, nicht vertrauenswürdige CodeBases von Kunden befinden. Auf gemeinsamen Hostservern, deren Anwendungen untereinander nicht vertrauenswürdig sind, sollte explizit die "als Benutzer ausführen"-Funktion deaktiviert sein. Diese Funktion kann durch Verbinden mit der SQL Express-Instanz (z. B. osql –E –S .\sqlexpress) und durch Ausführen des folgenden Transact-SQL-Befehls ausgeschaltet werden.

EXEC sp_configure 'show advanced option', '1'

GO

RECONFIGURE WITH OVERRIDE

GO

EXEC sp_configure 'user instances enabled', 0

GO

RECONFIGURE WITH OVERRIDE

GO

Sichere Webseiten, die Mitgliedschaft verwenden

Anwendungsseiten, die mit vertraulichen Daten arbeiten, z. B. Anmeldeseiten, sollten über standardisierte Web-Sicherheitsmechanismen abgesichert werden. Dazu gehören z. B. Maßnahmen wie Secure Sockets Layer (SSL). Außerdem erfordert es, dass Benutzer angemeldet sein müssen, um vertrauliche Vorgänge ausführen zu können (z. B. Aktualisierung von Benutzerinformationen oder Löschen von Benutzern).

Darüber hinaus dürfen auf Seiten keine vertraulichen Funktionsdaten (z. B. Kennwörter oder auch Benutzernamen) als Klartext dargestellt werden. Stellen Sie sicher, dass Seiten mit vertraulichen Informationen SSL verwenden und nur authentifizierten Benutzern zur Verfügung stehen. Vermeiden Sie auch, vertrauliche Funktionsdaten in Cookies zu speichern oder sie über unsichere Verbindungen zu senden.

Absichern gegen Denial-of-Service-Angriffe

Aktualisierungen oder umfangreiche Suchoperationen können die Reaktionsgeschwindigkeit der Mitgliedschaftsdatenquelle reduzieren, wenn diese von mehreren Clients gleichzeitig aufgerufen wird. Um die Anfälligkeit gegenüber Denial-of-Service-Angriffen so gering wie möglich zu halten, ist der Zugriff auf Benutzer mit Administratorrechten zu beschränken. Nur diese Benutzer sollten Zugriff auf ASP.NET-Seiten erhalten, auf denen Methoden zur Datenbankaktualisierung bzw. Datenbanksuchen ausgeführt werden können. Gleichzeitig dürfen für den allgemeinen Gebrauch nur solche ASP.NET-Seiten verfügbar gemacht werden, die eine Validierung und Kennwortverwaltung bereitstellen.

Fehlermeldungen und Ereignisse

Ausnahmen

So verhindern Sie, dass vertrauliche Informationen unerwünschten Quellen verfügbar gemacht werden: Konfigurieren Sie die Anwendung so, dass entweder keine ausführlichen Fehlermeldungen angezeigt werden oder nur dann ausführliche Fehlermeldungen angezeigt werden, wenn der Webserver der Client ist. Weitere Informationen finden Sie unter customErrors-Element (ASP.NET-Einstellungsschema).

Ereignisprotokoll

Führt der Server Windows Server 2003 aus, können Sie die Sicherheit der Anwendung verbessern, indem Sie das Ereignisprotokoll absichern. Außerdem verhindert die Festlegung von Parametern im Ereignisprotokoll bzgl. Größe, Beibehaltung usw., dass ein indirekter Denial-of-Service-Angriff ausgeführt werden kann.

Systemüberwachung

Erfolgreiche und fehlgeschlagene Anmeldeversuche werden mit dem ASP.NET-Systemüberwachungsfeature protokolliert. In der Standardkonfigurationseinstellung werden demnach bei fehlgeschlagenen Anmeldeversuchen der Benutzername und andere Diagnoseinformationen im Anwendung-Ereignisprotokoll aufgezeichnet. Stellen Sie sicher, dass der Zugriff auf das Ereignisprotokoll eingeschränkt ist, damit diese Informationen vertraulich bleiben.

Benutzerdefinierte Mitgliedschaftsanbieter

Beim Erstellen eines benutzerdefinierten Mitgliedschaftsanbieters ist sicherzustellen, dass die empfohlenen Vorgehensweisen bzgl. der Sicherheit eingehalten werden, um so während der Arbeit mit der Datenbank Angriffe zu vermeiden (z. B. SQL-Injection-Angriffe). Wenn ein benutzerdefinierter Mitgliedschaftsanbieter verwendet wird, muss dieser hinsichtlich der empfohlenen Sicherheitsvorgehensweisen überprüft worden sein.

Arbeiten mit kulturabhängigen Zeichen

Wenn Sie den SQL Server-Mitgliedschaftsanbieter oder einen benutzerdefinierten Mitgliedschaftsanbieter verwenden, wird Ihre Datenquelle möglicherweise für die Speicherung von Mitgliedschaftsdaten in einem kulturabhängigen Format konfiguriert. Benutzernamen aus dem Konfigurationselement Autorisierung und aus dem Mitgliedschaftsdatenspeicher werden in ASP.NET jedoch kulturinvariant ausgewertet. Dies kann zur Autorisierung eines nicht autorisierten Benutzers führen, wenn der Benutzername bei kulturinvarianter Behandlung mit dem Namen eines autorisierten Benutzers identisch ist.

Um unbefugte Zugriffe zu vermeiden, stellen Sie sicher, dass die Benutzernamen bei kulturinvarianter Auswertung eindeutig sind. Wahlweise können Sie für die Autorisierung nur Rollennamen angeben, indem Sie das Konfigurationselement Autorisierung verwenden und anschließend sicherstellen, dass die Rollennamen eindeutig sind, wenn sie kulturinvariant ausgewertet werden. Die Verwendung von Rollennamen für die Autorisierung wird häufig bevorzugt, da das Erstellen und Verwalten von Rollen auf eine Verwaltungsfunktion eingeschränkt werden kann.

Siehe auch

Weitere Ressourcen

Verwalten von Benutzern durch Mitgliedschaft