Freigeben über


Sichern von Anmeldungssteuerelementen

Aktualisiert: November 2007

Mit ASP.NET-Anmeldungssteuerelementen können Sie eine Lösung für die Steuerung des Zugriffs auf Webseiten anhand von Benutzerauthentifizierung, Mitgliedschaft und Rollen anbieten. Zu den Anmeldungssteuerelementen gehören die Steuerelemente CreateUserWizard, Login, LoginStatus, LoginView, PasswordRecovery und ChangePassword. In diesem Thema wird beschrieben, wie Sie die Sicherheit der Anmeldungssteuerelemente durch bewährte Vorgehensweisen für Konfiguration und Codegenerierung verbessern können.

Die Sicherheit der Anwendung kann erhöht werden, wenn Sie bei der Codegenerierung und Konfiguration die bewährten Vorgehensweisen befolgen. Es ist aber ebenso wichtig, dass Sie den Webservercomputer durch die neuesten Sicherheitspatches für Microsoft Windows und Internetinformationsdienste (IIS) stets auf dem aktuellen Stand halten und auch die Patches für Microsoft SQL Server und sonstige Datenquellen installieren.

Ausführlichere Informationen über bewährte 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 sowie auf der Microsoft-Website im Bereich "Patterns and Practices" (https://www.microsoft.com/resources/practices/default.mspx).

Darüber hinaus finden Sie Informationen über spezielle Sicherheitsmaßnahmen für andere Steuerelementtypen in folgenden Themen:

Allgemeine Sicherheitsmaßnahmen für Anmeldungssteuerelemente

Zur Sicherung von Anmeldungssteuerelementen ist es erforderlich, in verschiedenen Bereichen bestimmte bewährte Vorgehensweisen zu verwenden, die im Folgenden kurz behandelt werden. Ausführlichere Informationen finden Sie über die entsprechenden Links.

Verwenden des SSL-Protokolls (Secure Sockets Layer)

ASP.NET-Anmeldungssteuerelemente übertragen Informationen an den Server im Klartext über HTTP. Beim Umgang mit vertraulichen Informationen wird dringend empfohlen, dass Sie das HTTPS-Protokoll mit SSL-Verschlüsselung (Secure Sockets Layer) verwenden. SSL schützt Daten vor Änderungen (Datenintegrität), schützt die Identität eines Benutzers (Vertraulichkeit) und stellt sicher, dass die Daten vom erwarteten Client stammen (Authentifizierung). Weitere Informationen finden Sie unter Übersicht über Kryptografie und Configuring SSL on a Web Server or a Web Site in der IIS-Dokumentation.

Überprüfen der Benutzereingaben

Gehen Sie nie davon aus, dass Benutzereingaben sicher sind. Böswillige Benutzer können potenziell gefährliche Informationen vom Client an die Anwendung senden. Bei Anmeldungssteuerelementen ist es besonders wichtig, dass im Hinblick auf Benutzereingaben Vorsichtsmaßnahmen getroffen werden, denn die eingegebenen Informationen sind zumeist vertraulich. Weitere Informationen über Schutz gegen böswillige Eingaben finden Sie unter Grundlegende Sicherheitshinweise für Webanwendungen.

Verwenden Sie wenn möglich Validierungssteuerelemente, um die Gültigkeit von Benutzernamen und die Sicherheit von Kennwörtern zu testen. Doch nicht immer benötigen Sie zum Überprüfen von Benutzereingaben Validierungssteuerelemente. Zum Beispiel unterstützt das CreateUserWizard-Steuerelement die Validierung anhand von Anforderungen und Vergleichen. Sie können einen regulären Ausdruck auch mit der EmailRegularExpression-Eigenschaft angeben, um zu überprüfen, ob E-Mail-Adressen einem bestimmten Muster entsprechen. Mithilfe der PasswordRegularExpression-Eigenschaft können Sie überprüfen, ob die Kennwörter den Anforderungen entsprechen.

Für eine größtmögliche Flexibilität bei der Validierung der Benutzereingaben in allen Anmeldungssteuerelementen können Sie Vorlagen verwenden. Erstellen Sie möglichst immer eine Vorlage für das Steuerelement, fügen Sie einzelne Steuerelemente hinzu (i. d. R. TextBox-Steuerelemente), und fügen Sie Validierungssteuerelemente hinzu, um die Benutzereingaben so weit wie möglich einzuschränken.

Hinweis:

Führen Sie zusätzlich zur clientseitigen Validierung auch eine Validierung im Servercode durch, wenn Sie Validierungssteuerelemente verwenden. Dadurch wird verhindert, dass Benutzer die Validierung umgehen können, indem sie die Validierung des Clientskript deaktivieren oder ändern.

Weitere Informationen finden Sie unter Überprüfen der Benutzereingabe in ASP.NET-Webseiten.

Sichern des Ansichtszustands

Anmeldungssteuerelemente speichern Informationen im Ansichtszustand der Seite. Aus diesem Grund gehört es in diesem Zusammenhang zur bewährten Vorgehensweise, für die Sicherheit des Ansichtszustands zu sorgen. Auch wenn die Ansichtszustandsdaten in codiertem Format gespeichert werden, lassen sich die Daten ansehen und manipulieren. Weitere Informationen finden Sie unter Übersicht über den ASP.NET-Ansichtszustand.

Sichern der Mitgliedschaft

ASP.NET Mitgliedschaft bietet Funktionen zum Überprüfen und Speichern von Anmeldeinformationen. Durch die ASP.NET-Mitgliedschaftsfunktionalität der Steuerelemente CreateUserWizard, Login, PasswordRecovery und ChangePassword können Sie ein komplettes Authentifizierungssystem erstellen, das nur wenig oder gar keinen Code erfordert. Ferner können die Steuerelemente LoginStatus, LoginView und LoginName zur Verwaltung von Benutzermitgliedschaften und zur Steuerung des Seitenzugriffs innerhalb der Website verwendet werden. Weitere Informationen finden Sie unter Einführung in die Mitgliedschaft und Sichern der Mitgliedschaft.

Die in ASP.NET enthaltenen Mitgliedschaftsanbieter haben einen integrierten Schwellenwert für die maximale Anzahl ungültiger Versuche bei der Eingabe von Kennwort oder Kennwortantwort, der in der MaxInvalidPasswordAttempts-Eigenschaft angegeben wird. Mit der ASP.NET-Mitgliedschaft können Sie außerdem die Zeit in Minuten konfigurieren, die für die maximale Anzahl ungültiger Versuche bei der Eingabe von Kennwort oder Kennwortantwort zugelassen ist, bevor der Mitgliedschaftsbenutzer abgemeldet wird. Die Zeit wird in der PasswordAttemptWindow-Eigenschaft angegeben. Der Standardschwellenwert für Kennwortversuche liegt bei 5 Versuchen, das Standardzeitfenster für Kennwortversuche bei 10 Minuten. Die Schwellenwerte der Standardanbieter lassen sich mit Schwellenwerten überschreiben, die im membership-Abschnitt der Datei Web.config der Anwendung festgelegt werden. Es wird empfohlen, dass Sie diese Schwellenwerte so niedrig wie praktisch möglich festlegen. Außerdem sollten Sie die RequiresQuestionAndAnswer-Eigenschaft nicht auf false festlegen, weil sonst ungültige Versuche bei der Kennwortantwort nicht verfolgt werden. Weitere Informationen finden Sie unter Mitgliedschaftsanbieter.

Sichern von E-Mail

Das CreateUserWizard-Steuerelement, das ChangePassword-Steuerelement und das PasswordRecovery-Steuerelement können E-Mail-Nachrichten versenden, die genaue Informationen über die abgeschlossene Benutzertransaktion enthalten. Stellen Sie sicher, dass an Benutzer versendete E-Mails nur die notwendigen Informationen offen legen. Verhindern Sie z. B., dass nicht beabsichtigte Empfänger die E-Mail-Nachrichten anhand der Betreffzeile leicht von anderen E-Mails filtern können. Es wird empfohlen, Kennwörter nicht per E-Mail zu versenden. Ziehen Sie andere Methoden zum Überprüfen von Kennworttransaktionen in Betracht, z. B. das Versenden eines Bestätigungscodes und eines Bestätigungs-URL zum Beenden der Transaktion.

Wenn die MailDefinition-Eigenschaft des CreateUserWizard-Steuerelements, des ChangePassword-Steuerelements bzw. des PasswordRecovery-Steuerelements nicht angegeben ist, wird keine E-Mail-Nachricht versendet. Wenn diese Steuerelemente für das Versenden von E-Mail-Nachrichten konfiguriert sind, sollten Sie das Mailfehlerereignis behandeln, um SMTP-bezogene Fehler abzufangen und damit zu verhindern, dass Informationen unbeabsichtigt an die Benutzer weitergegeben werden. Behandeln Sie für das ChangePassword-Steuerelement den SendMailError, und legen Sie die Handled-Eigenschaft des SendMailErrorEventArgs-Objekts auf true fest. Ein Beispiel, das die Behandlung des Mailfehlerereignisses veranschaulicht, finden Sie im Thema zum SendMailError-Ereignis. Weitere Informationen über das Installieren des SMTP-Diensts (Simple Mail Transfer Protocol) finden Sie unter Gewusst wie: Installieren und Konfigurieren von virtuellen SMTP-Servern in IIS 6.0.

Überlegungen zur Sicherheit einzelner Steuerelemente

In den folgenden Abschnitten werden Überlegungen zur Sicherheit einzelner Anmeldungssteuerelemente beschrieben.

CreateUserWizard

Das CreateUserWizard-Steuerelement erfasst Informationen von einem Benutzer und erstellt dann im ASP.NET-Mitgliedschaftssystem ein Konto für diesen Benutzer. Sie können das CreateUserWizard-Steuerelement für das Erfassen weiterer Informationen erweitern, indem Sie vor und nach dem CreateUserWizardStep-Schritt bzw. dem CompleteWizardStep-Schritt weitere Felder und Schritte hinzufügen. Ein Sicherheitsrisiko könnte entstehen, wenn ein Benutzer nicht alle Schritte in einem CreateUserWizard-Steuerelement ausführt, aber dennoch ein Konto erstellt wird. Um zu verhindern, dass Benutzer benutzerdefinierte Schritte im Assistenten umgehen können, überschreiben Sie die OnNextButtonClick-Methode, und führen Sie eine benutzerdefinierte Authentifizierung aus. Sobald die Informationen gesammelt sind, können Sie den Benutzer mit der CreateUser-Methode der MembershipProvider-Klasse erstellen.

Wenn Sie Verwaltungsaufgaben ausführen und den CreateUserWizard verwenden, um automatisch Benutzerkonten zu erstellen, sollten Sie die AutoGeneratePassword-Eigenschaft auf true und die LoginCreatedUser-Eigenschaft auf false festlegen. In diesem speziellen Szenario wird empfohlen, die DisableCreatedUser-Eigenschaft auf false festzulegen.

Login-Steuerelement

Das Login-Steuerelement ist ein zusammengesetztes Steuerelement mit Textfeldern für Benutzername und Kennwort sowie einem Kontrollkästchen, mit dem Benutzer festlegen können, ob ihre Identität beim nächsten Besuch der Seite automatisch erkannt werden soll. Aufgrund der RememberMeSet-Eigenschaft wird ein Authentifizierungscookie an den Browser des Benutzers gesendet, und die DisplayRememberMe-Eigenschaft zeigt ein Kontrollkästchen an, über das der Benutzer festlegen kann, ob ein dauerhaftes Cookie gesendet werden soll. Sie sollten RememberMeSet nicht auf true und DisplayRememberMe nicht auf false festlegen, denn dadurch wird ein Cookie gesendet, ohne dass der Benutzer davon weiß. Mit dem Speichern von Cookies auf dem Computer des Benutzers sind grundsätzlich Risiken verbunden. Cookies sind eine Form der Benutzereingabe und können daher für die Offenlegung von Informationen und Spoofing missbraucht werden. Weitere Informationen finden Sie unter Übersicht über ASP.NET-Cookies.

Wenn das Login-Steuerelement von einer großen Zahl von Endbenutzern verwendet wird, ist es außerdem sinnvoll, das Steuerelement zu kodieren, damit Benutzer auf öffentlichen Computern die Möglichkeit haben, ein nicht dauerhaftes Cookie zu verwenden, das nach dem Ablaufen der Sitzung verworfen wird. Weitere Informationen zum Schreiben von Cookies finden Sie unter Gewusst wie: Schreiben eines Cookies.

LoginName-Steuerelement

Das LoginName-Steuerelement zeigt den Namen an, unter dem sich der Benutzer angemeldet hat, oder den Domänennamen und den Kontonamen des Benutzers, wenn die Anwendung Windows-Authentifizierung verwendet. Fügen Sie ggf. ein Kontrollkästchen hinzu, mit dem der Benutzer angeben kann, ob der Name oder Kontoinformationen angezeigt werden sollen. Zum Beispiel sollten Benutzer auf öffentlichen Computern verhindern können, dass vertrauliche Informationen angezeigt werden.

LoginView-Steuerelement

Mit dem LoginView-Steuerelement können Sie angemeldeten und nicht angemeldeten (anonymen) Benutzern unterschiedliche Informationen anzeigen. Überprüfen Sie die Inhalte, die Sie mit der AnonymousTemplate-Vorlage und der LoggedInTemplate-Vorlage sowie mit Vorlagen anzeigen, die der RoleGroups-Eigenschaft zugeordnet sind. Dadurch stellen Sie sicher, dass Benutzer keine Vorlagen anzeigen können, die nicht für sie bestimmt sind. Die Auflistung in der RoleGroups-Eigenschaft wird in der Reihenfolge durchsucht, in der die Vorlagen definiert sind. Dem Benutzer wird die erste übereinstimmende Rollengruppenvorlage angezeigt. Wenn ein Benutzer Mitglied von mehreren Rollen ist, wird die erste Rollengruppenvorlage angezeigt, die mit einer Rolle des Benutzers übereinstimmt. Wenn mit einer Rolle mehrere Vorlagen verknüpft sind, wird nur die erste definierte Vorlage verwendet. Weitere Informationen finden Sie unter Grundlegende Informationen über die Rollenverwaltung.

PasswordRecovery-Steuerelement

Mit dem PasswordRecovery-Steuerelement können sich Benutzer ihr Kennwort an die E-Mail-Adresse senden lassen, die ihrem Benutzernamen zugeordnet ist. Folgen Sie bei der Konfiguration des PasswordRecovery-Steuerelements den nachfolgenden Richtlinien:

  • Behandeln Sie das SendMailError-Ereignis, um auf Fehler beim Versenden einer E-Mail-Nachricht zu reagieren.

  • Legen Sie mit der MaxInvalidPasswordAttempts-Eigenschaft eine begrenzte Anzahl von Versuchen für die Eingabe der Kennwortantwort und mit der PasswordAttemptWindow-Eigenschaft einen begrenzten Zeitrahmen fest.

  • Überprüfen Sie alle Informationen, die in den E-Mails an die Benutzer gesendet werden, und überprüfen Sie die Sicherheit des Kanals, auf dem die Nachrichten übermittelt werden, besonders wenn die E-Mail-Nachricht zur Wiederherstellung des Kennworts das Kennwort des Benutzers enthält. Vermeiden Sie das Senden von E-Mail-Nachrichten, bei denen klar hervorgeht, dass sie vertrauliche Informationen enthalten, z. B. Nachrichten, in denen die Betreffzeile das Wort "Kennwort" enthält.

ChangePassword-Steuerelement

Mit dem ChangePassword-Steuerelement können Benutzer ihr Kennwort ändern. Folgen Sie bei der Konfiguration des ChangePassword-Steuerelements den nachfolgenden Richtlinien:

  • Behandeln Sie das SendMailError-Ereignis, um auf Fehler beim Versenden einer E-Mail-Nachricht zu reagieren.

  • Legen Sie mit der MaxInvalidPasswordAttempts-Eigenschaft eine begrenzte Anzahl von Versuchen für die Eingabe der Kennwortantwort und mit der PasswordAttemptWindow-Eigenschaft einen begrenzten Zeitrahmen fest.

  • Überprüfen Sie alle Informationen, die in den E-Mails an die Benutzer gesendet werden, und überprüfen Sie die Sicherheit des Kanals, auf dem die Nachrichten übermittelt werden, insbesondere, wenn aufgrund der Konfiguration des ChangePassword-Steuerelements das neue Kennwort per E-Mail an den Benutzer gesendet wird.

  • Verwenden Sie SSL, um zu verhindern, dass das Benutzerkennwort beim Postback gelesen werden kann.

  • Beschränken Sie den Zugriff auf die Datei, die von dem ChangePassword-Steuerelement als Text für E-Mail-Nachrichten verwendet wird, die an den Benutzer gesendet werden. Diese Datei wird von der BodyFileName-Eigenschaft der MailDefinition-Klasse definiert.

Siehe auch

Aufgaben

Gewusst wie: Installieren und Konfigurieren von virtuellen SMTP-Servern in IIS 6.0

Konzepte

Grundlegende Sicherheitshinweise für Webanwendungen

Sichern von Standardsteuerelementen

Sichern der Mitgliedschaft

Weitere Ressourcen

Verwalten von Benutzern durch Mitgliedschaft

Sichern von ASP.NET-Websites

Syntax von Validierungs-Serversteuerelementen

Kryptografische Dienste