Einschränken der ASP.NET-Siteübersicht aus Sicherheitsgründen
Aktualisiert: November 2007
Eine übliche Sicherheitsanforderung bei Websites besteht darin, dass nur bestimmte Mitglieder oder andere autorisierte Benutzer bestimmte Seiten zur Anzeige bringen dürfen. Die ASP.NET-Rollenverwaltung bietet eine Möglichkeit, den Zugang zu Webdateien auf der Grundlage von Sicherheitsrollen einzuschränken. Durch das Einschränken der Siteübersicht aus Sicherheitsgründen können Sie Navigationslinks in einer Siteübersicht verbergen. Dies kann auch basierend auf Sicherheitsrollen erfolgen. Weitere Informationen über rollenbasierte Sicherheit finden Sie unter Grundlegende Informationen über die Rollenverwaltung.
So funktioniert die Einschränkung der Siteübersicht aus Sicherheitsgründen
Betrachten Sie die folgende Navigationsstruktur, die in einer ASP.NET-Seite angezeigt wird.
Home
Products
Hardware
Software
Discounts
Services
Training
Consulting
Support
Clients, die nicht die Rolle sogenannter Kunden innehaben, bleibt der Zugriff auf die Unterstützungswebseite verwehrt. Dies wird mittels einer ASP.NET-Zugriffsregel realisiert, die für die Seite Support.aspx konfiguriert wurde.
Um den Unterstützungslink in der Navigationsanzeige zu verbergen, konfigurieren Sie den Siteübersichtsanbieter in der Datei Web.config so, dass die Einschränkung aus Sicherheitsgründen aktiviert wird. Es sind keine zusätzlichen Änderungen erforderlich, da die Anwendung die ASP.NET-URL-Autorisierung und die Dateiautorisierung verwendet, um den Link zur Unterstützungsseite zu verbergen. Das mit ASP.NET Version 2.0 mitgelieferte XmlSiteMapProvider-Steuerelement führt automatisch Autorisierungsüberprüfungen für jeden Siteübersichtsknoten unter Verwendung der URL- und Dateiautorisierung durch.
Wenn Sie den Unterstützungslink auch Clients anzeigen möchten, die nicht die Rolle von Kunden innehaben, können Sie das roles-Attribut des Siteübersichtsknotens der Datei Support.aspx verwenden. Das roles-Attribut erweitert den Zugriff auf einen Siteübersichtsknoten über die Zugangsebene hinaus, die die URL-Autorisierung und die Dateiautorisierung ermöglichen.
Im folgenden Codebeispiel wird das roles-Attribut für die Unterstützungsseite auf Customersfestgelegt. Bei dieser Einstellung können Benutzer, die nicht die Kundenrolle innehaben, nach Aktivierung der Einschränkung aus Sicherheitsgründen den Navigationslink zur Unterstützungsseite anzeigen, auch wenn ihnen das Betrachten der eigentlichen Datei durch die URL-Autorisierung oder die Dateiautorisierung nicht gestattet ist.
<?xml version="1.0" encoding="utf-8" ?>
<siteMap>
<!-- other <siteMapNode> elements -->
<siteMapNode title="Support" description="Support"
url="~/Customers/Support.aspx" roles="Customers" />
</siteMap>
Benutzer, die nicht die Kundenrolle innehaben, würden die folgende Navigationsstruktur sehen, wenn ihnen das Betrachten der Unterstützungsseite durch die URL- oder die Dateiautorisierung nicht gestattet ist.
Home
Products
Hardware
Software
Discounts
Services
Training
Consulting
Aktivieren der Einschränkung aus Sicherheitsgründen
Die Einschränkung aus Sicherheitsgründen funktioniert in Verbindung mit ASP.NET-Rollen. Für das ordnungsgemäße Funktionieren der Einschränkung aus Sicherheitsgründen muss daher der Zugriff auf die Seiten durch Zugriffsregeln (allow-Elemente und deny-Elemente) geregelt werden. Weitere Informationen über Zugriffsregeln finden Sie unter Verwalten der Autorisierung mithilfe von Rollen.
Die Einschränkung aus Sicherheitsgründen ist standardmäßig deaktiviert und kann nicht programmgesteuert aktiviert werden. Sie kann nur in der Datei Web.config aktiviert werden. Dies gilt auch für alle benutzerdefinierten Klassen, die von der SiteMapProvider-Klasse erben.
Um die Einschränkung aus Sicherheitsgründen zu aktivieren, müssen Sie in der Datei Web.config ein siteMap-Element (ASP.NET-Einstellungsschema)-Element konfigurieren. Wenn die Siteübersicht den Standardsiteübersichtsanbieter von ASP.NET verwendet, enthält die Datei Web.config möglicherweise kein siteMap-Element (ASP.NET-Einstellungsschema)-Element. In diesem Fall müssen Sie ein solches Element hinzufügen. Im folgenden Codebeispiel wird der Standardsiteübersichtsanbieter hinzugefügt und die Einschränkung aus Sicherheitsgründen aktiviert.
<system.web>
<!-- …other configuration settings -->
<siteMap defaultProvider="XmlSiteMapProvider" enabled="true">
<providers>
<add name="XmlSiteMapProvider"
description="Default SiteMap provider."
type="System.Web.XmlSiteMapProvider "
siteMapFile="Web.sitemap"
securityTrimmingEnabled="true" />
</providers>
</siteMap>
</system.web>
Überlegungen zur Leistung
Die Funktion zum Einschränken der Sicherheit verwendet bei jeder Anforderung die URL-Autorisierung, um zu bestimmen, ob ein Benutzer Zugriff auf den mit dem siteMapNode-Element verbundenen URL hat. Abhängig von der Anzahl der Knoten, die autorisiert werden, reduziert dieser zusätzliche Aufwand die Leistung. Bei aktivierter Einschränkung aus Sicherheitsgründen können Sie die folgenden Methoden verwenden, um die Leistung zu steigern:
Begrenzen Sie die Anzahl von Knoten in der Siteübersichtsdatei Die Ausführung von Einschränkungsoperationen aus Sicherheitsgründen kann bei Siteübersichtsdateien mit mehr als 150 Knoten wesentlich länger dauern als bei einer geringeren Anzahl.
Legen Sie das roles -Attribut explizit auf siteMapNode-Elemente fest Beachten Sie, dass das roles-Attribut nur bei solchen Knoten auf ein Platzhalterzeichen oder das Sternchen (*) festgelegt werden sollte, die problemlos von jedem Client angezeigt werden können. Durch die Verwendung des roles-Attributs kann die URL-Autorisierung in ASP.NET für den URL umgangen werden, der mit dem siteMapNode verbunden ist, wenn ein Benutzer eine der Rollen innehat, die in dem Attribut aufgelistet sind.
Auswählen von Rollen, um unbeabsichtigte Einschränkungen zu verhindern
Gehen Sie bei der der Konfiguration der Regel- und Rollenattribute behutsam vor, um die unbeabsichtigte Einschränkung untergeordneter Siteübersichtsknoten zu vermeiden. Betrachten Sie die folgende Navigationsstruktur, die in einer ASP.NET-Seite angezeigt wird.
Home
Products
Hardware
Der Regelsatz der URL- und Dateiautorisierung für die Datei Products.aspx sollte nicht mehr Einschränkungen als die Autorisierungsregeln beinhalten, die für die Datei Hardware.aspx eingestellt wurden. Andernfalls wird der Hardwarelink vor Benutzern verborgen, obwohl diese ihn sehen sollen, da der übergeordnete Link zu Products verborgen ist. Um die verborgenen Links verfügbar zu machen, können Sie zu beiden Siteübersichtsknoten ein roles-Attribut hinzufügen, das die abgelehnten ASP.NET-Rollen auflistet.
Es wird empfohlen, dass der Stammknoten in einer Siteübersicht den Zugriff durch jeden Benutzer erlaubt. Legen Sie dazu das roles-Attribut auf das Sternchen (*) oder ein Platzhalterzeichen fest, wie im folgenden Codebeispiel gezeigt.
<?xml version="1.0" encoding="utf-8" ?>
<siteMap>
<siteMapNode title="Home" description="Home"
url="default.aspx" roles="*">
<!-- other <siteMapNode> elements -->
</siteMapNode>
</siteMap>
In einer Siteübersicht können Sie auf URLs verweisen, die sich außerhalb der Webanwendung befinden. Der Zugriff auf einen URL außerhalb der Anwendung kann von ASP.NET nicht überprüft werden. Bei aktivierter Einschränkung der Siteübersicht aus Sicherheitsgründen ist der Siteübersichtsknoten nur sichtbar, wenn Sie das Attribut der Rolle auf das Sternchen (*) festgelegt haben. Bei dieser Einstellung ist der Siteübersichtsknoten für alle Clients sichtbar, ohne dass der Zugriff auf den URL getestet werden muss.
Verwenden der Einschränkung aus Sicherheitsgründen mit mehreren Siteübersichten oder Anbietern
Sie können mehrere Siteübersichten zusammen verwenden, um die Navigationsstruktur einer einzelnen Website zu definieren. So kann zum Beispiel die Datei Web.sitemap genau wie die Datei Web.config aufgeteilt und in verschiedenen Ordnern platziert werden.
Die Verbindung zwischen Siteübersichten wird durch Verweise auf eine untergeordnete Siteübersichtsdatei oder einen untergeordneten Anbieter hergestellt, die im siteMapFile-Attribut oder im provider-Attribut des SiteMapNode-Objekts in der übergeordneten Siteübersicht angegeben werden.
Das folgende Codebeispiel zeigt einen Siteübersichtsknoten, der auf eine andere Siteübersicht verweist.
<?xml version="1.0" encoding="utf-8" ?>
<siteMap>
<!-- other <siteMapNode> elements -->
<siteMapNode siteMapFile="~/Customers/Customers.sitemap"
securityTrimmingEnabled="true" />
</siteMap>
Durch die Einschränkung aus Sicherheitsgründen beeinflusste API-Member
Über Navigationssteuerelemente können Sie Sitenavigation mit wenig oder ganz ohne Code Ihren Seiten hinzufügen. Sie können aber auch programmgesteuert mit Sitenavigation arbeiten. Wenn die Webanwendung ausgeführt wird, macht ASP.NET ein SiteMap-Objekt verfügbar, das die Siteübersichtsstruktur widerspiegelt. Alle Member des SiteMap-Objekts sind statisch. Das SiteMap-Objekt wiederum macht eine Auflistung von SiteMapNode-Objekten verfügbar, die Eigenschaften für die einzelnen Knoten der Übersicht enthalten. Dies geschieht deshalb, weil bei Verwendung des SiteMapPath-Steuerelements dieses Steuerelement mit dem SiteMap-Objekt und dem SiteMapNode-Objekt zusammenarbeitet, um die entsprechenden Links automatisch darzustellen.
Sie können das SiteMap-Objekt, das SiteMapNode-Objekt und das SiteMapProvider-Objekt in Ihrem Code verwenden, um die Siteübersichtsstruktur zu durchlaufen, oder Sie erstellen ein benutzerdefiniertes Steuerelement zum Anzeigen von Siteübersichtsdaten. Sie können zwar nicht in die Siteübersicht schreiben, aber Sie können Siteübersichtsknoten in der Objektinstanz ändern. Weitere Informationen finden Sie unter Gewusst wie: Programmgesteuertes Ändern von Siteübersichtsknoten im Arbeitsspeicher oder unter Gewusst wie: Programmgesteuertes Auflisten von Siteübersichtsknoten.
ASP.NET verwendet zum Lesen der Datei Web.sitemap den Standardsiteübersichtsanbieter, XmlSiteMapProvider. Wenn Sie Siteübersichtsinformationen an anderer Stelle als der Siteübersichtsdatei speichern möchten, erstellen Sie einen eigenen Siteübersichtsanbieter und konfigurieren die Anwendung so, dass dieser benutzerdefinierte Anbieter aufgerufen wird. Der Siteübersichtsanbieter wird in der Datei Web.config konfiguriert. Sobald die Anwendung ausgeführt wird, ruft ASP.NET Ihren Anbieter auf, der die Siteübersichtsinformationen je nach Bedarf abrufen kann. Anschließend erstellt und füllt ASP.NET die SiteMapNode-Objekte auf Basis der vom Anbieter erhaltenen Informationen. Auf diese Objekte kann programmgesteuert zugegriffen werden, indem man die SiteMap-Klasse verwendet. Weitere Informationen hierzu finden Sie unter Implementieren von ASP.NET-Siteübersichtsanbietern.
Sicherheitshinweis: |
---|
Die Implentierung eines benutzerdefinierten Siteübersichtsanbieters, der die Siteübersichtsdateien in einer Datei ohne die Dateinamenerweiterung .sitemap speichert, stellt ein potentielles Sicherheitsrisiko dar. ASP.NET ist standardmäßig für den Schutz von Dateien mit bekannter Dateinamenerweiterung -wie zum Beispiel .sitemap- konfiguriert. Diese Dateien können vom Client nicht gedownloadet werden. Legen Sie Siteübersichtsdateien mit anderen Dateinamenerweiterungen als .sitemap im Ordner App_Data ab, um Ihre Daten zu schützen. Weitere Informationen finden Sie unter Sichern der ASP.NET-Sitenavigation. |
Bei aktivierter Einschränkung aus Sicherheitsgründen wird das Verhalten einiger Member der Klassen SiteMap, SiteMapNode und SiteMapNodeCollection beeinflusst. Bei der Verwendung dieser Klassen sehen Sie das folgende Verhalten:
Wenn ein Siteübersichts-API-Member versucht, auf einen Siteübersichtsknoten zu verweisen, für den der Benutzer nicht die für die Anzeige erforderlichen Sicherheitsrechte besitzt, wird von dem betreffenden Siteübersichts-API-Member null zurückgegeben. So wird zum Beispiel von den Eigenschaften CurrentNode, NextSibling, ParentNode und PreviousSiblingnull zurückgegeben, wenn die Eigenschaften versuchen, einen Siteübersichtsknoten mit eingeschränktem Zugriff zurückzugeben.
Wenn ein Siteübersichts-API-Member die Struktur der Siteübersichtsknoten traversieren muss, wird jeder Siteübersichtsknoten vom Traversieren ausgeschlossen, für den der Benutzer nicht über die zur Anzeige erforderlichen Rechte verfügt. So wird zum Beispiel beim Ausführen der ChildNodes-Methode die Knotenauflistung gefiltert, sodass nur solche Knoten enthalten sind, für die der Benutzer über die zur Anzeige erforderlichen Rechte verfügt. Im Fall von API-Membern, die Knotenpfade verfolgen, wie zum Beispiel die Clone-Methode und die IsDescendantOf-Methode, enden die Pfade bei Knoten mit eingeschränktem Zugriff. Dies kann zu Klonoperationen führen, bei denen eine reduzierte Anzahl von Knoten zurückgegeben wird. Es kann auch passieren, dass die IsDescendantOf-Methode den Wert false zurückgibt, obwohl ein Knoten von der Struktur her der Nachfolger des angeforderten Knotens ist.
Wenn ein Siteübersichts-API-Member auf einen Stammknoten verweist, für den der Benutzer nicht über die zur Anzeige erforderlichen Rechte verfügt, wird eine InvalidOperationException-Ausnahme zurückgegeben. Nur der Stammknoten des Stammanbieters muss für alle Benutzer zugänglich sein. Dies verhindert das Auftreten einer Ausnahme beim ersten Abruf des SiteMap-Objekts.
Bei inkorrektem Verweis eines SiteMapNode-Objekts auf eine andere Siteübersicht oder einen anderen Anbieter wird eine ConfigurationException-Ausnahme ausgelöst.
Hinweis: |
---|
In einer Siteübersicht können Sie auf URLs verweisen, die sich außerhalb der Webanwendung befinden. Der Zugriff auf einen URL außerhalb der Anwendung kann von ASP.NET nicht überprüft werden. Bei aktivierter Einschränkung der Siteübersicht aus Sicherheitsgründen ist der Siteübersichtsknoten nur sichtbar, wenn Sie das Attribut der Rolle auf das Sternchen (*) festgelegt haben. Bei dieser Einstellung ist der Siteübersichtsknoten für alle Clients sichtbar, ohne dass der Zugriff auf den URL getestet werden muss. |
Siehe auch
Aufgaben
Exemplarische Vorgehensweise: Filtern von Siteübersichtsknoten auf der Basis von Sicherheitsrollen
Konzepte
Sichern der ASP.NET-Sitenavigation