Medium-Trust-Datei I / O-Erlaubnis
-
30-09-2019 - |
Frage
Nach diesem MSDN-Artikel über Medium vertrauen unter Medium-Trust:
ist FileIOPermission beschränkt. Dies Mittel können Sie nur Zugriff auf Dateien in Ihre Anwendung der virtuelle Verzeichnis der Hierarchie. Ihre Anwendung wird nicht gewährt Lesen, Schreiben, Anhängen und PathDiscovery Berechtigungen für Ihre Anwendung virtuelle Verzeichnishierarchie.
Doch für meinen aktuellen Hosting-Provider führt Anwendungen unter mittel Vertrauen und wenn ich versuche, eine Datei in der Anwendung des Stammordner zu lesen / schreiben, ich habe einen access to path 'myfile.xml' denied
Fehler.
Diese Datei gelesen wird, das folgende Stück Code mit
XElement file = XElement.Load(HttpContext.Current.Server.MapPath("~/myfile.xml"));
Update-Full-Fehler:
Zugriff auf den Pfad 'C: \ WebSites \ mywebsite \ myfile.xml' IS verweigert.
Beschreibung: Eine nicht behandelte Ausnahme während der Ausführung des aufgetretenen aktuelle Web-Anfrage. Bitte lesen Sie die Stack-Trace für weitere Informationen über der Fehler und wo sie ihren Ursprung in der Code.
Ausnahmedetails: System.UnauthorizedAccessException: Zugriff auf den Pfad 'C: \ WebSites \ mywebsite \ myfile.xml' IS verweigert.
ASP.NET ist nicht zugangsberechtigt die angeforderte Ressource. Erwägen Vergabe von Zugriffsrechten auf die Ressource auf die ASP.NET-Anforderung Identität. ASP.NET hat eine Basis-Prozessidentität (Typischerweise {MACHINE} \ ASPNET auf IIS 5 oder Netzwerkdienst auf IIS 6 und IIS 7, und der konfigurierte Anwendungspool Identität auf IIS 7.5), die, wenn verwendet wird, die Anwendung Identitätswechsel nicht. Wenn die Anwendung Identitätswechsel über, die Identität der anonym Benutzer (typischerweise IUSR_MACHINENAME) oder die authentifizierte Anforderung Benutzer.
Um ASP.NET Zugriff auf eine Datei zu gewähren, Rechtsklick auf die Datei im Explorer, wählen Sie „Eigenschaften“ und wählen Sie die Registerkarte Sicherheit. Klicken Sie auf „Hinzufügen“, um hinzuzufügen, die entsprechende Benutzer oder eine Gruppe. Markieren das ASP.NET-Konto, und überprüfen Sie die Boxen für den gewünschten Zugriff.
Quellfehler:
Es wurde eine nicht behandelte Ausnahme erzeugt während der Ausführung der aktuellen Web-Anfrage. Informationen über die Ursprung und die Position der Ausnahme werden kann, mit der Ausnahme identifiziert Stack-Trace.
Stack-Trace:
[UnauthorizedAccessException: Zugriff auf den Weg 'C: \ WebSites \ mywebsite \ myfile.xml' IS verweigert.]
System.IO .__ Error.WinIOError (Int32 errorcode, String maybeFullPath) +12892935 System.IO.FileStream.Init (String Pfad, Filemode-Modus, Fileaccess-Zugang, Int32 Rechte, Boolean useRights, Fileshare Aktie, Int32 buffer, Fileoptions Optionen, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath) 2481
System.IO.FileStream..ctor (String Pfad, Filemode-Modus, Fileaccess Zugang, Fileshare Aktie, Int32 buffer, Fileoptions Optionen, String msgPath, Boolean bFromProxy) +229 System.IO.FileStream..ctor (String Pfad, Filemode-Modus, Fileaccess Zugang, teilen Fileshare) +102
System.Xml.XmlWriterSettings.CreateWriter (String output) +5224496
System.Xml.Linq.XElement.Save (String filename, Saveoptions-Optionen) +108
mesoBoard.Services.SiteConfig.UpdateCache () 1971 mesoBoard.Web.MvcApplication.OnApplicationStarted () +62 Ninject.Web.Mvc.NinjectHttpApplication.Application_Start () +604[Httpexception (0x80004005): Der Zugang zu der Weg 'C: \ WebSites \ mywebsite \ myfile.xml' IS verweigert.]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode (Httpcontext Kontext, Httpapplication app) +3985477 System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS (IntPtr appContext, Httpcontext Kontext, Method [] Handler) +191
System.Web.HttpApplication.InitSpecial (HttpApplicationState Zustand, Method [] Handler, IntPtr appContext, Httpcontext context) +325 System.Web.HttpApplicationFactory.GetSpecialApplicationInstance (IntPtr appContext, Httpcontext context) +407 System.Web.Hosting.PipelineRuntime.InitializeApplication (IntPtr appContext) +375[Httpexception (0x80004005): Der Zugang zu der Weg 'C: \ WebSites \ mywebsite \ myfile.xml' IS verweigert.]
System.Web.HttpRuntime.FirstRequestInit (Httpcontext Kontext) +11524352
System.Web.HttpRuntime.EnsureFirstRequestInit (Httpcontext Kontext) +141
System.Web.HttpRuntime.ProcessRequestNotificationPrivate (IIS7WorkerRequest wr, Httpcontext context) +4782309
Lösung
Sie müssen sicherstellen, dass das Benutzerkonto des Application Pool läuft auf der Website gelesen hat / Schreibzugriff auf die Datei / Ordner. Standardmäßig, ich glaube, Sie Leseberechtigungen haben sollten, aber keine Schreibrechte. Auch aus Gründen der Sicherheit, könnte es eine gute Idee sein, die Datei aus dem Ordner Wwwroot in etwas zu bewegen, die nicht korrupt gesamte Anwendung.
webdir / data
webdir / data / myfile.xmlwebdir / wwwroot
webdir / wwwroot / default.aspx
Andere Tipps
Ihre IO Erlaubnis klingt wie es ist nur eine Erlaubnis Problem mit Ihrer Datei. Ich weiß, was, wenn ich eine Datei auf meine Hosting-Provider laden, ich Login auf ihre Bedienfeld habe und manuell den IIS-Konto Schreibzugriff auf sie gibt, als Lesezugriff die einzige Berechtigung automatisch gewährt wird.
Auf einer anderen Anmerkung, der Speicherort Ihrer XML-Datei stellt ein Sicherheitsproblem. Versuchen Sie, die Datei im „~ / App_Data /“ Ordner setzen, ist es ein besonderes .NET Ordner, als Ihre Datenordner mehr eingeschränkt wird - im Moment habe ich zu www.yoursite.com/data/myfile.xml gehen könnte und herunterladen, während eine Datei in den Ordner App_Data nicht über das Internet heruntergeladen werden kann.
Sie haben die XElement-Klasse. Der Namensraum „System.Xml.Linq“ wird wahrscheinlich nicht in Ihrer Hosting „mittlere Ebene“ Konfiguration erlaubt. So verwenden Linq in Vertrauen mittleren Ebene, folgen Sie bitte den folgenden Verfahren
Medium Trust gibt an, dass die Anwendung nur Zugriff auf den $ AppDir. Sie können Medium Vertrauen Ebene, um zusätzlichen Zugriff auf das Medium Vertrauen durch Veränderung der FileIOPermission um andere Verzeichnisse als $ AppDir anpassen. Allerdings fand ich, dass, wenn Sie Server.MapPath nennen ( „/“) auch unter einer angepassten Medium Trust-Ebene, dann werden Sie eine Ausnahme „Antrag auf Genehmigung des Typs‚System.Security.Permissions.FileIOPermission erhalten, mscorlib, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089' ist fehlgeschlagen "
Es ist meine Theorie, dass dies liegt daran, dass Sie den Zugriff auf das Dateisystem außerhalb der von dem $ AppDir fordern“. Wir haben am Ende, um alle Anrufe zu Server.MapPath () von unseren Web-Anwendungen zu entfernen.
stellte ich eine Website auf GoDaddy und fand, dass die einzige Art, wie ich den Schreibzugriff ermöglichen könnte, ist es für das zu ermöglichen, war ganzes Webstamm aber das könnte die Beschränkung für den Hosting-Plan nur gewesen ?