Sichern des Sitzungszustands

Aktualisiert: November 2007

Mit dem ASP.NET-Sitzungszustand können Sie Werte für einen Benutzer speichern und abrufen, während dieser durch die verschiedenen ASP.NET-Seiten einer Webanwendung navigiert. Anforderungen, die von ein und demselben Browser stammen und innerhalb eines bestimmten Zeitraums liegen, werden vom ASP.NET-Sitzungszustand als eine Sitzung erfasst. Die Variablenwerte können für die Dauer einer solchen Sitzung beibehalten werden. Browsersitzungen werden entweder durch einen Sitzungscookie identifiziert oder – wenn der Sitzungszustand als "cookieless" konfiguriert ist – in der URL.

Standardmäßig ist der ASP.NET-Sitzungszustand für alle ASP.NET-Anwendungen aktiviert und so konfiguriert, dass Browsersitzungen durch ein Sitzungscookie identifiziert werden.

Der ASP.NET-Sitzungszustand speichert die Werte der Sitzungsvariablen standardmäßig im Speicher. Sie können den Sitzungszustand jedoch auch so konfigurieren, dass die Sitzungsvariablenwerte in einem Zustandsserver, einem SQL-Server oder einem benutzerdefinierten Sitzungszustandsspeicher gespeichert werden.

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

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 sowie auf der Microsoft-Website im Bereich "patterns and practices" (https://www.microsoft.com/resources/practices/default.mspx).

Sichere Sitzungszustandskonfiguration

Die Sitzungszustandsfunktion ist standardmäßig aktiviert. Die standardmäßigen Konfigurationseinstellungen sind auf die sichersten Werte festgelegt. Sie sollten den Sitzungszustand jedoch deaktivieren, wenn dieser von Ihrer Anwendung nicht benötigt wird. Informationen über die Sitzungszustands-Konfigurationseinstellungen und ihre Standardwerte finden Sie unter sessionState-Element (ASP.NET-Einstellungsschema).

Sichern von Konfigurationswerten

Wenn vertrauliche Informationen in der Konfigurationsdatei einer Anwendung gespeichert werden, müssen Sie die vertraulichen Werte mithilfe der geschützten Konfiguration verschlüsseln. Zu den besonders vertraulichen Informationen gehören die Verschlüsselungsschlüssel, die im machineKey-Konfigurationselement gespeichert sind, und die Datenquellen-Verbindungszeichenfolgen, die im connectionStrings-Konfigurationselement gespeichert sind. Weitere Informationen finden Sie unter Verschlüsseln von Konfigurationsinformationen mithilfe der geschützten Konfiguration.

Sichern von Verbindungen zu einer Sitzungszustandsdatenquelle

Verbindungszeichenfolgen

Wie bereits erwähnt, ist es wichtig, die in Verbindungszeichenfolgen gespeicherten vertraulichen Informationen zu schützen. Dabei handelt es sich um die Verbindungszeichenfolgen, die für die Verbindung zu dem Computer mit SQL Server, dem Sitzungszustandsdienst sowie zu anderen Datenquellen verwendet werden. Damit die Verbindung zum Datenserver sicher bleibt, sollten die Verbindungszeichenfolgeninformationen in der Konfiguration mithilfe der geschützten Konfiguration verschlüsselt werden. Weitere Informationen finden Sie unter Verschlüsseln von Konfigurationsinformationen mithilfe der geschützten Konfiguration.

Herstellen von Verbindungen zu SQL Server mithilfe der integrierten Sicherheit

Verbindungen zu Computern, die SQL Server ausführen, 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 für die Verbindung zu einem Computer mit SQL Server verwendet, wird die Sitzungszustandsfunktion auf die Identität des Prozesses zurückgesetzt. Stellen Sie sicher, dass die Prozessidentität, die 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 und unter Sitzungszustandsmodi.

Sichern der Sitzungs-ID

Beim Schutz Ihrer Anwendung und Ihrer Daten ist es wichtig, dass Sie die Sitzungs-ID vor dem Zugriff durch unerwünschte Quellen im Netzwerk schützen, damit sie nicht bei einem Replay-Angriff (Abhören und Wiedergeben) gegen Ihre Anwendung eingesetzt werden kann. Die folgenden Empfehlungen können die Sicherheit der Sitzungs-ID verbessern.

  • Schützen Sie die Anwendung mit Secure Sockets Layer (SSL).

  • Geben Sie für die Timeout-Eigenschaft der Sitzung einen kleineren Wert an. Außerdem sollten Sie erwägen, auf dem Client für eine Dauer, die dem Sitzungstimeout entspricht, eine Umleitung zu erzwingen, oder mithilfe der AddHeader-Methode einen Refreshheader hinzuzufügen, wie im folgenden Beispiel gezeigt.

    Response.AddHeader("Refresh", Session.Timeout & ";URL=Logoff.htm"
    Response.AddHeader("Refresh", Session.Timeout + ";URL=Logoff.htm";
    
  • Vermeiden Sie, Sitzungen ohne Cookies zu verwenden. Wenn Sie jedoch Sitzungen ohne Cookies verwenden müssen, weisen Sie die Benutzer darauf hin, dass sie Links mit einer Sitzungs-ID nicht speichern, per E-Mail versenden oder als Lesezeichen verwenden sollten.

  • Vermeiden Sie es, die Cookiemodi AutoDetect und UseDeviceProfile anzugeben.

  • Geben Sie den Benutzern die Möglichkeit, sich abzumelden, und rufen Sie bei einer Abmeldung die HttpSessionState.Abandon-Methode auf. Fordern Sie den Benutzer auf, den Browser nach dem Abmelden zu schließen.

  • Bei Sitzungen ohne Cookies sollten Sie regenerateExpiredSessionID auf true festlegen. So wird immer eine neue Sitzung gestartet, wenn eine abgelaufene Sitzungs-ID angegeben wird.

Sichern von Webseiten, die den Sitzungszustand verwenden

Anwendungsseiten, die mit vertraulichen Daten arbeiten, machen den Einsatz von standardmäßigen Websicherheitsmechanismen erforderlich. Dazu gehören z. B. Secure Sockets Layer (SSL) und die nur für angemeldete Benutzer mögliche Ausführung von sensiblen Vorgängen (Aktualisierung von persönlichen Daten, Löschen von Benutzerkonten usw.).

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.

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 bezüglich der Größe, der Beibehaltung usw., dass ein indirekter Denial of Service-Angriff ausgeführt werden kann.

Benutzerdefinierte Anbieter für den Sitzungszustandsspeicher

Bei der Erstellung eines benutzerdefinierten Anbieters für den Sitzungszustandsspeicher 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 Anbieter für den Sitzungszustandsspeicher verwendet wird, muss dieser hinsichtlich der empfohlenen Sicherheitsvorgehensweisen überprüft worden sein.

Siehe auch

Konzepte

Übersicht über den ASP.NET-Sitzungszustand

Weitere Ressourcen

Sichern von ASP.NET-Websites