Domanda

In base a questo MSDN articolo sulla attendibilità media , sotto medio-trust:

  

FileIOPermission è limitato. Questo   significa che è possibile solo accedere ai file in   directory virtuale dell'applicazione   gerarchia. L'applicazione è concesso   Leggere, scrivere, aggiungere, e PathDiscovery   autorizzazioni per i tuoi dell'applicazione   gerarchia di directory virtuale.

Tuttavia, per il mio fornitore di hosting corrente esegue applicazioni sotto medio fiducia e quando provo a leggere / scrivere un file nella cartella principale dell'applicazione, ottengo un errore di access to path 'myfile.xml' denied.

Questo file viene letto utilizzando il seguente pezzo di codice

XElement file = XElement.Load(HttpContext.Current.Server.MapPath("~/myfile.xml"));

Errore aggiornamento completo:

  

Accesso al percorso   'C: \ WebSites \ MyWebSite \ myfile.xml' IS   negato.

     

Descrizione: un'eccezione non gestita   durante l'esecuzione del   richiesta Web corrente. Si prega di rivedere la   Analisi dello stack per ulteriori informazioni su   l'errore e dove ha avuto origine in   il codice.

     

Dettagli eccezione:   System.UnauthorizedAccessException:   Accesso al percorso   'C: \ WebSites \ MyWebSite \ myfile.xml' IS   negato.

     

ASP.NET non è autorizzato ad accedere   la risorsa richiesta. Ritenere   la concessione dei diritti di accesso alla risorsa   alla richiesta di identità di ASP.NET.   ASP.NET ha un'identità processo di base   (In genere {} MACHINE \ ASPNET su IIS 5   o Servizio di rete su IIS 6 e IIS 7,   e il pool di applicazioni configurato   identità su IIS 7.5) che viene utilizzato se   l'applicazione non sta impersonando.   Se l'applicazione è impersonando   attraverso ,   l'identità sarà l'anonimo   utente (tipicamente IUSR_MACHINENAME) o   l'utente richiesta autenticata.

     

Per concedere l'accesso ASP.NET a un file,   fare clic destro sul file in Esplora risorse,   scegliere "Proprietà" e selezionare la   scheda Protezione. Fai clic su "Aggiungi" per aggiungere il   utente o gruppo appropriato. Evidenziare   l'account ASP.NET, e controllare il   scatole per l'accesso desiderato.

     

Errore Origine:

     

un'eccezione non gestita è stata generata   durante l'esecuzione della corrente   richiesta web. Le informazioni relative al   origine e la posizione dell'eccezione   può essere identificato tramite l'eccezione   Analisi dello stack di seguito.

     

Analisi dello stack:

     

[UnauthorizedAccessException: Accesso   al percorso   'C: \ WebSites \ MyWebSite \ myfile.xml' IS   negato.]
  System.IO .__ Error.WinIOError (Int32   errorCode, String maybeFullPath)   +12892935 System.IO.FileStream.Init (percorso String,   modalità FileMode, accesso FileAccess,   diritti Int32, useRights booleani,   FileShare quota, Int32 bufferSize,   opzioni FileOptions,   SECURITY_ATTRIBUTES secAttrs, String   msgPath, booleano bFromProxy, booleano   useLongPath) 2481
  System.IO.FileStream..ctor (String   percorso, modalità FileMode, FileAccess   accesso, FileShare azione, Int32   bufferSize, opzioni FileOptions,   String msgPath, booleano bFromProxy)   229 System.IO.FileStream..ctor (String   percorso, modalità FileMode, FileAccess   accedere, condividere FileShare) 102
  System.Xml.XmlWriterSettings.CreateWriter (String   OutputFileName) +5224496
  System.Xml.Linq.XElement.Save (String   fileName, SaveOptions opzioni) 108
  mesoBoard.Services.SiteConfig.UpdateCache ()   1971 mesoBoard.Web.MvcApplication.OnApplicationStarted ()   +62 Ninject.Web.Mvc.NinjectHttpApplication.Application_Start ()   604

     

[HttpException (0x80004005): Accesso alla   il sentiero   'C: \ WebSites \ MyWebSite \ myfile.xml' IS   negato.]
  System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode (HttpContext   contesto, HttpApplication app) +3985477   System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS (IntPtr   appContext, HttpContext contesto,   MethodInfo [] movimentatori) 191
  System.Web.HttpApplication.InitSpecial (HttpApplicationState   statali, MethodInfo [] movimentatori, IntPtr   appContext, HttpContext contesto) 325   System.Web.HttpApplicationFactory.GetSpecialApplicationInstance (IntPtr   appContext, HttpContext contesto) 407   System.Web.Hosting.PipelineRuntime.InitializeApplication (IntPtr   appContext) 375

     

[HttpException (0x80004005): Accesso alla   il sentiero   'C: \ WebSites \ MyWebSite \ myfile.xml' IS   negato.]
  System.Web.HttpRuntime.FirstRequestInit (HttpContext   contesto) +11524352
  System.Web.HttpRuntime.EnsureFirstRequestInit (HttpContext   contesto) 141
  System.Web.HttpRuntime.ProcessRequestNotificationPrivate (IIS7WorkerRequest   wr, HttpContext contesto) +4782309

È stato utile?

Soluzione

È necessario assicurarsi che l'account utente del pool di applicazioni in esecuzione il sito ha letto / permessi di scrittura il file / cartella. Per impostazione predefinita, penso che si dovrebbe avere autorizzazioni di lettura, ma autorizzazioni non di scrittura. Inoltre, per motivi di sicurezza, potrebbe essere una buona idea per spostare il file dalla cartella wwwroot in qualcosa che non può corrompere l'intera applicazione.

  

WEBDIR / dati
  WEBDIR / dati / myfile.xml

     

WEBDIR / wwwroot
  WEBDIR / wwwroot / default.aspx

Altri suggerimenti

I tuoi IO suoni autorizzazione come se fosse solo un problema di autorizzazione con il file. So quello che ogni volta che caricare un file al mio fornitore di hosting, devo accedere al proprio pannello di controllo e dare manualmente l'IIS accesso all'account scrittura ad esso, come l'accesso in lettura è l'unica autorizzazione concessa automaticamente.

In un'altra nota, la posizione del file XML pone un problema di sicurezza. Prova a mettere il file nella cartella "~ / App_Data /", si tratta di una speciale cartella .NET che è più limitato di quanto la cartella di dati - in questo momento potevo andare a www.yoursite.com/data/myfile.xml e scaricarlo, considerando che qualsiasi file nella cartella App_Data non può essere scaricato attraverso il web.

Qual è la cartella App_Data utilizzata per in Visual Studio?

Si utilizza la classe XElement. Lo spazio dei nomi "System.Xml.Linq" probabilmente non è consentito nella configurazione di hosting "medio livello". Per utilizzare Linq nel livello medio di fiducia, si prega di seguire il seguente procedura

Medium Trust specifica che l'applicazione ha accesso solo al $ AppDir. È possibile personalizzare il livello medio fiducia per aggiungere un ulteriore accesso al mezzo fiducia alterando la FileIOPermission per includere altre directory di $ AppDir. Tuttavia, ho scoperto che quando si chiama Server.MapPath ( "/") sotto anche un Medium Trust Livello personalizzato, quindi si otterrà una richiesta di eccezione "per l'autorizzazione di tipo 'System.Security.Permissions.FileIOPermission, mscorlib, versione = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089' non riuscita "

E 'la mia teoria che questo è perché si richiede l'accesso al file system di fuori del del $ AppDir". Abbiamo finito per dover rimuovere tutte le chiamate a Server.MapPath () dai nostri applicazioni web.

ho creato un sito web su GoDaddy e ha scoperto che l'unico modo ho potuto consentire l'accesso in scrittura, è stato quello di consentire per la radice intera web , ma che potrebbe avere appena stata la restrizione per questo piano di hosting ?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top