Sichern von Profileigenschaften
Aktualisiert: November 2007
Sie können das ASP.NET-Profilfeature verwenden, um Benutzereinstellungen in einer Datenquelle (z. B. einer Datenbank) zu speichern bzw. daraus abzurufen. In der Konfigurationsdatei der Anwendung geben Sie die Eigenschaften und Gruppen an, aus denen die Benutzerprofile bestehen. Zur Laufzeit generiert ASP.NET basierend auf den Konfigurationsinformationen für die einzelnen Profileigenschaften dynamisch eine Klasse mit stark typisierten Accessoren. Diese Klasse wird dann mit der statischen Profile-Eigenschaft verfügbar gemacht. Profileigenschaftenwerte werden von einem Profilanbieter in einer Datenquelle entweder in Klartext-XML oder in serialisiertem binärem Format gespeichert.
Sie können die Sicherheit der Anwendung verbessern, indem Sie bei Codierung und Konfiguration entsprechend bewährter Methoden vorgehen. Darüber hinaus ist es wichtig, den Anwendungswebserver über die neuesten Sicherheitsupdates für Microsoft Windows und Microsoft Internetinformationsdienste (IIS) sowie durch Updates für Microsoft SQL Server oder andere Profildatenquellen stets auf dem neuesten Stand zu halten.
Weitere Informationen über optimale Vorgehensweisen beim Schreiben von Code und bei der Sicherung von Anwendungen finden Sie im Buch Writing Secure Code von Michael Howard und David LeBlanc. Außerdem sollten Sie den Empfehlungen unter Microsoft Patterns and Practices (https://www.microsoft.com/resources/practices/default.mspx) folgen.
Sichere Profilkonfiguration
Das ASP.NET-Profilfeature wird standardmäßig aktiviert. Obwohl in den Standardkonfigurationseinstellungen die sichersten Werte festgelegt sind, sollten Sie das Benutzerprofilfeature deaktivieren, falls es für die Anwendung nicht benötigt wird. Informationen über Profilkonfigurationseinstellungen und deren Standardwerte finden Sie unter profile-Element (ASP.NET-Einstellungsschema). Anonyme Identifikation, die für Profileigenschaften festgelegt werden kann, ist standardmäßig deaktiviert. Informationen über die Konfigurationseinstellungen für anonyme Identifikation und deren Standardwerte finden Sie unter anonymousIdentification-Element (ASP.NET-Einstellungsschema).
Sichern von Konfigurationswerten
Wenn vertrauliche Informationen in der Konfigurationsdatei gespeichert werden, sollten 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 Verbindungszeichenfolgen einer Datenquelle, die im connectionStrings-Konfigurationselement gespeichert sind. Weitere Informationen finden Sie unter Verschlüsseln von Konfigurationsinformationen mithilfe der geschützten Konfiguration.
Sichern der Verbindungen zu einer Profildatenquelle
Verbindungszeichenfolgen
Wie bereits erwähnt, müssen die in einer Verbindungszeichenfolge gespeicherten vertraulichen Informationen geschützt werden. Die Verbindungszeichenfolge ermöglicht die Kommunikation mit einem Computer, auf dem SQL Server ausgeführt wird, oder mit einer anderen Datenquelle. Um die Verbindung zum Datenbankserver zu sichern, sind die Informationen zu Verbindungszeichenfolgen mithilfe der geschützten Konfiguration zu verschlüsseln. Weitere Informationen finden Sie unter Verschlüsseln von Konfigurationsinformationen mithilfe der geschützten Konfiguration.
Herstellen von Verbindungen zu SQL Server mithilfe der integrierten Sicherheit
Es wird empfohlen, für die Verbindung mit Computern, die SQL Server ausführen, integrierte Sicherheit zu verwenden. Dadurch soll verhindert werden, dass die Verbindungszeichenfolge gefährdet wird und Benutzer-IDs sowie Kennwörter kompromittiert werden. Wenn Sie eine Verbindung angeben, die integrierte Sicherheit zur Verbindung mit einem Computer verwendet, auf dem SQL Server ausgeführt wird, wird der Profilanbieter 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 standardmäßig Profilinformationen gespeichert werden, verfügt über Datenbankrollen und Ansichten, mit denen der Benutzerzugriff auf die für die Anwendung erforderlichen Berechtigungen eingeschränkt werden kann. Sie sollten der Benutzer-ID, die die Verbindung zur SQL Server-Profildatenbank herstellt, die geringstmöglichen Berechtigungen einräumen. Weitere Informationen finden Sie unter Rollen und Ansichten in der Datenbank für die Anwendungsdienste für SQL Server.
Schützen von vertraulichen Daten in der Profildatenquelle
Der standardmäßige Benutzerprofilanbieter verschlüsselt die in der Profildatenquelle gespeicherten Werte nicht. Sie sollten vertrauliche Informationen vor dem Speichern in der Profildatenquelle verschlüsseln, um zu verhindern, dass sie offengelegt werden, falls die Datenquelle kompromittiert wird. Sie können entweder vertrauliche Daten verschlüsseln, bevor die Werte in der Profileigenschaft gespeichert werden, oder Sie können die ProfileBase-Klasse oder die ProfileProvider-Klasse um Verschlüsselungsfunktionen erweitern.
Verhindern der Freigabe von anonymen Profildaten zwischen Anwendungen
Wenn für eine Anwendung und die von ihr verwendeten Profileigenschaften anonyme Identifikation aktiviert ist, besteht das Risiko, dass die anonymen Profileigenschaftenwerte für eine andere Anwendung verfügbar gemacht werden. Dies kann geschehen, wenn das cookiePath-Attribut der anonymen Identifikation auf einen Pfad festgelegt ist, der mehrere Anwendungen einschließt, und wenn mehrere Anwendungen in einer gemeinsamen Domäne vorhanden sind.
Wenn Sie anonyme Identifikation mit Benutzerprofilen verwenden und die anonymen Benutzer für die einzelnen Anwendungen separat halten möchten, sollten Sie im machineKey-Element für jede Anwendung separate Verschlüsselungsschlüssel angeben, den Gültigkeitsbereich für das anonyme Identifizierungscookie auf eine spezifische Anwendung und die ApplicationName-Eigenschaft jeder einzelnen Anwendung auf einen unterschiedlichen Wert festlegen.
Absichern von Webseiten, die Profile verwenden
Anwendungsseiten, die mit vertraulichen Daten arbeiten, welche in Profileigenschaften gespeichert sind, sollten über standardisierte Websicherheitsmechanismen abgesichert werden. Dazu gehört z. B. die Verwendung von SSL (Secure Sockets Layer). Außerdem erfordert es, dass Benutzer angemeldet sein müssen, um vertrauliche Vorgänge ausführen zu können (z. B. die Aktualisierung von Benutzerinformationen oder das Löschen von Benutzern). Vermeiden Sie es außerdem, vertrauliche Daten in Cookies zu speichern.
Absichern gegen Denial-of-Service-Angriffe
ProfileManager-Klassenmethoden, die Aktualisierungen oder lang andauernde Suchoperationen ausführen, können die Antwortzeiten der Profildatenquelle verlängern, wenn die Methoden gleichzeitig von einer größeren Anzahl Clients aufgerufen werden. Um die Anfälligkeit der Anwendung für Denial-of-Service-Angriffe zu reduzieren, lassen Sie nur Benutzer mit Administratorrechten auf ASP.NET-Seiten zugreifen, die Datenbankaktualisierungen oder profilbezogene Suchoperationen ausführen.
Fehlermeldungen und Ereignisse
Ausnahmen
Um zu vermeiden, dass vertrauliche Informationen offengelegt werden, sollten Sie die Anwendung so konfigurieren, dass detaillierte Fehlermeldungen nicht oder nur dann angezeigt werden, wenn die Anwendung lokal auf dem Webserver ausgeführt wird. Weitere Informationen finden Sie im customErrors-Konfigurationselement.
Ereignisprotokoll
Das ASP.NET-Profilfeature protokolliert Informationen für bestimmte Fehlerbedingungen mithilfe der ASP.NET-Systemüberwachung. Dabei werden die Informationen standardmäßig im Ereignisprotokoll gespeichert. Führt der Computer 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 Aufbewahrung usw., dass ein indirekter Denial of Service-Angriff auf das Ereignisprotokoll ausgeführt werden kann.
Überwachungsinformationen
Der Webserver kann so konfiguriert werden, dass das Auftreten bestimmter Aktionen im Zusammenhang mit dem Profilfeature überwacht und die Überwachungsinformationen in einer Protokolldatei gespeichert werden. Da in der Überwachungsprotokolldatei vertrauliche Daten wie Benutzernamen gespeichert werden können, sollten Sie die Überwachung sowie den Zugriff auf die Überwachungsprotokolldatei und die Bestimmung ihres Speicherorts ausschließlich auf Administratoren beschränken.
Benutzerdefinierte Profilanbieter
Halten Sie sich beim Erstellen eines benutzerdefinierten Profilanbieters für Datenbankzugriffe an die Empfehlungen zur Verhinderung von Angriffen, z. B. SQL-Injection-Angriffen. Wenn ein benutzerdefinierter Profilanbieter verwendet wird, muss dieser hinsichtlich der Sicherheitsempfehlungen überprüft worden sein.
Siehe auch
Konzepte
Übersicht über ASP.NET-Profileigenschaften