ASP.NET-Vertrauensebenen und Richtliniendateien

Richtliniendateien werden Vertrauensebenen mithilfe des <securityPolicy>-Konfigurationselements zugeordnet, das nur in einer Konfigurationsdatei auf Siteebene gültig ist (Web.config). Sie können Vertrauensebenen entfernen oder hinzufügen, indem Sie im Konfigurationsabschnitt neue Einträge einfügen, die die Bezeichnung der zu verwendenden Vertrauensebene und die zu verwendenden Richtliniendateien angeben. Die Standarddateien für Vertrauensebenen werden im Verzeichnis Config in dem Ordner installiert, der die Datei Aspnet_isapi.dll enthält. Dies ist derselbe Speicherort, an dem sich auch die Konfigurationsdatei Machine.config und die Laufzeitsicherheitsrichtlinien-Datei befinden.

Die Vertrauensebene Full stellt einen Sonderfall dar. Da sie gleichbedeutend mit der Vertrauensebene Full in der Zone Lokaler Computer ist, wendet der ASP.NET-Host keine zusätzlichen Richtlinien auf entsprechende Anwendungen an. Die Vertrauensebene Full wird daher einem internen Handler zugeordnet, und ASP.NET fügt der Anwendungsdomäne für Anwendungen mit voller Vertrauenswürdigkeit keine weiteren Richtlinien hinzu.

Das folgende Beispiel zeigt den securityPolicy-Abschnitt einer Konfigurationsdatei, in dem den Vertrauensebenen verschiedene Richtliniendateien zugeordnet werden.

<system.web>
    <securityPolicy>
    <trustLevel name="Full"    policyFile="internal"/>
    <trustLevel name="High"    policyFile="web_hightrust.config"/>
    <trustLevel name="Medium"  policyFile="web_mediumtrust.config"/>
    <trustLevel name="Low"     policyFile="web_lowtrust.config"/>
    <trustLevel name="Minimal" policyFile="web_minimaltrust.config"/>
    </securityPolicy>
</system.web>

Um zu verhindern, dass Anwendungen ihre Vertrauensebene selbst angeben, können Sie eine <location>-Direktive festlegen und das allowOverride-Attribut auf false festlegen. Dies wäre zum Beispiel bei einem Server sinnvoll, der für verschiedene Anwendungen als Host fungiert und bei dem es daher erforderlich ist, die Vertrauensebene der gehosteten Anwendungen einzuschränken.

Ändern von Vertrauensebenendateien

Sie können die Richtliniendateien ändern oder neue Richtliniendateien mit benutzerdefinierten Berechtigungssätzen erstellen. Beispielsweise können Sie den Inhalt der Datei Web_hightrust.config kopieren und eine Berechtigung zum Herstellen von OLEDB-Verbindungen zuweisen, indem Sie zunächst dem SecurityClasses-Abschnitt der Richtliniendatei die OleDbPermission-Klasse hinzufügen, wie im folgenden Codebeispiel gezeigt.

<SecurityClass Name="OleDbPermission" 
    Description="System.Data.OleDb.OleDbPermission, System.Data, Version=2.0.0.0, 
    Culture=neutral, PublicKeyToken=b77a5c561934e089"/>

Anschließend können Sie die Parameter für die angegebene OleDbPermission, einschließlich Beschränkungen für die OLEDB-Verbindungszeichenfolgen, festlegen. Dann können Sie angeben, welche Berechtigungssätze die OleDbPermission-Sicherheitsklasse enthalten, indem Sie in der Vertrauensrichtliniendatei dem PermissionSet-Element das IPermission-Element ASP.NET hinzufügen. Im folgenden Codebeispiel wird angegeben, dass die einzige zulässige OLEDB-Verbindung unbeschränkten Zugriff auf die Access-Datenbank Catalog.mdb gewährt.

<PermissionSet
  class="NamedPermissionSet"
  version="1"
  Name="ASP.Net">
  <IPermission
    class="OleDbPermission"
    version="1"
    Unrestricted="true" />
</PermissionSet>

Einige Berechtigungen, z. B. die OleDbPermission-Berechtigung, ermöglichen die Angabe zusätzlicher Einschränkungen für den Zugriff, der gewährt oder verweigert werden soll. Beispielsweise können Sie mit der OleDbPermission-Berechtigung das Herstellen von Verbindungen unter Verwendung des .NET Framework-Datenanbieters für OLE DB zulassen, jedoch mit Einschränkungen der zulässigen OLEDB-Verbindungszeichenfolgen. Im folgenden Codebeispiel wird angegeben, dass nur OLEDB-Verbindungen mit Access-Datenbanken zulässig sind.

<IPermission class="OleDbPermission" version="1">
    <add ConnectionString=
        "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\access_data\catalog.mdb""
        KeyRestrictions=""data source=;user id=;password=;" 
        KeyRestrictionBehavior="AllowOnly"/>
</IPermission>

Sie können die aktualisierte Vertrauensrichtliniendatei speichern und die aktuelle Datei Web_hightrust.config durch sie ersetzen. Stattdessen können Sie auch eine neue Vertrauensrichtliniendatei erstellen und entweder diese Datei als Richtliniendatei für die Vertrauensebene High angeben oder eine neue Vertrauensebene erstellen, wie im folgenden Codebeispiel gezeigt.

    <trustLevel name="HighCustom"
    policyFile="web_highcustom.config"/>

Um die Standardeinstellungen zu erhalten, verfügt ASP.NET über zwei Kopien jeder Datei, die Einstellungen für Vertrauensebenen enthält. Eine Kopie weist die Dateinamenerweiterung .config auf, wie im obigen Konfigurationsabschnitt gezeigt. Die CONFIG-Datei enthält die Einstellungen für jede vom System verwendete Vertrauensebene. Die zweite Kopie weist die Dateinamenerweiterung .config.default auf und enthält die Standardeinstellungen für die jeweilige Vertrauensebene. Wenn die aktuellen Einstellungen für die Vertrauensebene geändert wurden und Sie die Standardeinstellungen wiederherstellen möchten, können Sie den Inhalt der CONFIG-Datei durch den Inhalt der CONFIG.DEFAULT-Datei ersetzen.

Eine ausführliche Beschreibung des Verwaltens einer Vertrauensrichtliniendatei finden Sie unter "How To: Use Medium Trust in ASP.NET 2.0" unter Patterns and Practices (PAG): Security Guidance for Applications.

Siehe auch

Konzepte

Funktionsweise der ASP.NET-Richtlinien

Weitere Ressourcen

Sicherheit für ASP.NET-Webanwendungen