System.Security.SecurityException, wenn das virtuelle Verzeichnis auf eine Remotefreigabe in ASP.NET

Dieser Artikel hilft Ihnen, das Problem zu beheben, das möglicherweise ausgelöst wird, System.Security.SecurityException wenn Sie ein virtuelles Verzeichnis verwenden, das auf eine Remotefreigabe verweist, um eine Microsoft ASP zu hosten. NET-basierte Anwendung.

              Originale Produktversion: ASP.NET
Ursprüngliche KB-Nummer: 320268

Symptome

Wenn Sie ein virtuelles Verzeichnis verwenden, das auf eine Remotefreigabe verweist, um eine ASP zu hosten. NET-basierte Anwendung erhalten Sie möglicherweise eine Fehlermeldung, die einem der folgenden Beispiele ähnelt:

  • Meldung 1

    Beschreibung der Sicherheits-Ausnahme: Die Anwendung hat versucht, einen Vorgang auszuführen, der von der Sicherheitsrichtlinie nicht zulässig ist. Wenden Sie sich an Ihren Systemadministrator, oder ändern Sie die Vertrauensebene der Anwendung in der Konfigurationsdatei, um dieser Anwendung die erforderliche Berechtigung zu erteilen.
    Ausnahmedetails: System.Security.SecurityException: Sicherheitsfehler.
    Quellfehler:
    Zeile 30: private statische bool __intialized = false; Zeile 31: Zeile 32: public Global_asax() { Zeile 33: if ((ASP. Global_asax.__intialized == false)) { Zeile 34: ASP. Global_asax.__intialized = true;

  • Nachricht 2

    Serverfehler in der /ApplicationName-Anwendung.
    Parserfehlerbeschreibung: Fehler beim Analysieren einer Ressource, die zum Verarbeiten dieser Anforderung erforderlich ist. Überprüfen Sie die folgenden Details zu Analysefehlern, und ändern Sie Ihre Quelldatei entsprechend.
    Parserfehlermeldung: Der Typ ApplicationName.Global konnte nicht geladen werden.
    Source Error: Zeile 1: <%@ Application Codebehind="Global.asax.cs" Inherits="ApplicationName.Global" %> Source File: Path of Application\global.asax Line: 1

Ursache

Auf System.Web den Namespace wird nicht angewendet AllowPartiallyTrustedCallersAttribute . Weitere Informationen finden Sie unter Patterns & Practices.

Jeder Code, der sich nicht in der My_Computer_Zone Codegruppe befindet und nicht über dieses Attribut verfügt, erfordert das FullTrust-Benutzerrecht . Daher ist für die Remotefreigabe, die den Inhalt der Webanwendungen enthält, FullTrust erforderlich.

Lösung

Um dieses Verhalten zu beheben, gewähren Sie der Remotefreigabe die Berechtigung FullTrust :

  1. Öffnen Sie auf dem Webserver Die Verwaltung, und doppelklicken Sie dann auf Microsoft .NET Framework-Konfiguration.

  2. Erweitern Sie Laufzeitsicherheitsrichtlinie, Computer und dann Codegruppen.

  3. Klicken Sie mit der rechten Maustaste auf All_Code, und wählen Sie dann Neu aus.

  4. Select Create a new code group. Geben Sie Ihrer Codegruppe einen relevanten Namen, z. B. den Namen der Anwendungsfreigabe. Wählen Sie Weiter aus.

  5. Wählen Sie in der Liste Bedingungstyp für diese Codegruppe auswählen die Option URL aus.

  6. Geben Sie im Feld URL den Pfad der Freigabe im folgenden Format ein:
    file:////\\computername\\sharename\*

    Hinweis

    Ersetzen Sie computername durch den Namen des Computers, auf dem die Remotefreigabe gehostet wird. Ersetzen Sie sharename durch den Namen der Freigabe.

  7. Wählen Sie Weiter aus. Wählen Sie auf der nächsten Seite Vorhandenen Berechtigungssatz verwenden und dann FullTrust aus.

  8. Wählen Sie Weiter und dann Fertig stellen aus.

  9. Starten Sie Internetinformationsdienste (IIS) neu, um den ASP.NET-Arbeitsprozess neu zu starten.

Wenn Microsoft .NET Framework Configuration nicht unter Verwaltung angezeigt wird, können Sie das .NET Framework Software Development Kit (SDK) installieren, um Microsoft .NET Framework Configuration hinzuzufügen. Stattdessen können Sie den folgenden Befehl ausführen, um die Änderung vorzunehmen:

Drive :\WINDOWS\Microsoft.NET\Framework\v2.0.50727\caspol.exe -m -ag 1 -url "file:////\\computername\sharename\*" FullTrust -exclusive on

Führen Sie den folgenden Befehl aus, um weitere Informationen zur Funktionsweise dieser Argumente zu erfahren:

caspol.exe -?

Status

Es handelt sich hierbei um ein beabsichtigtes Verhalten.

Weitere Informationen

In dieser Konfiguration muss das Konto, unter dem der ASP.NET-Arbeitsprozesses ausgeführt wird, über ausreichende Rechte für die Remotefreigabe verfügen. Sie können das Konto, unter dem der Arbeitsprozess ausgeführt wird, mithilfe des <processmodel> -Tags in der Machine.config-Datei festlegen.

Schritte zum Reproduzieren des Verhaltens

  1. Erstellen Sie ein neues virtuelles Verzeichnis, das auf eine Remotefreigabe verweist.
  2. Erstellen Sie eine Anwendung für das virtuelle Verzeichnis. Stellen Sie sicher, dass der Benutzer, der eine Verbindung mit der Freigabe herstellt, über Lesezugriff auf den Remoteinhalt verfügt.
  3. Ändern Sie im <processmodel> Tag der Machine.config Datei den Benutzer in einen Domänenbenutzer, der über Listen-, Lese- und Ausführungsberechtigungen für die Remotefreigabe verfügt.
  4. Erstellen Sie eine Inline-.aspx-Datei, und legen Sie die Datei dann in der Remotefreigabe ab.
  5. Stellen Sie eine Anforderung für die Seite.

References

Weitere Informationen zu den Berechtigungen, die das ASPNET-Konto zum Ausführen ASP.NET Anwendungen benötigt, finden Sie unter Einführung in ASP.NET Identity. Weitere Informationen zur ASP.NET Sicherheit finden Sie unter INFO: ASP.NET Security Overview ( Info: ASP.NET Security Overview).