Pregunta

De acuerdo con esta artículo de MSDN acerca de la confianza medio , bajo medio-confianza:

  

FileIOPermission está restringido. Esta   significa que sólo puede acceder a los archivos en   directorio virtual de la aplicación   jerarquía. Se autoriza su aplicación   Leer, escribir, Añadir, y PathDiscovery   permisos para sus aplicaciones de   jerarquía de directorio virtual.

Sin embargo, para mi actual proveedor de alojamiento corre aplicaciones de bajo a mediano confianza y cuando trato de leer / escribir un archivo en la carpeta raíz de la aplicación, me sale un error de access to path 'myfile.xml' denied.

Este archivo se lee utilizando el siguiente fragmento de código

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

Error de actualización completa:

  

El acceso a la ruta   'C: \ sitios de Internet \ misitioweb \ myfile.xml' es   negado.

     

Descripción: Se produjo una excepción   producido durante la ejecución de la   solicitud Web actual. Por favor revise la   Seguimiento de la pila para obtener más información acerca de   el error y dónde se originó en   el código.

     

Detalles de la excepción:   System.UnauthorizedAccessException:   El acceso a la ruta   'C: \ sitios de Internet \ misitioweb \ myfile.xml' es   negado.

     

ASP.NET no está autorizado a acceder   el recurso solicitado. Considerar   conceder derechos de acceso a los recursos   a la identidad de solicitud de ASP.NET.   ASP.NET tiene una identidad de proceso de base   (Normalmente {MACHINE} \ ASPNET en IIS 5   o Servicio de red en IIS 6 y IIS 7,   y el grupo de aplicaciones configurado   de identidad en IIS 7.5) que se utiliza si   la aplicación no se está haciendo pasar.   Si la aplicación se está haciendo pasar   a través de,   la identidad será el anonimato   usuario (típicamente IUSR_MACHINENAME) o   la petición del usuario autenticado.

     

Para conceder acceso a un archivo de ASP.NET,   haga clic en el archivo en el Explorador,   elija "Propiedades" y seleccione el   pestaña de seguridad. Haga clic en "Añadir" para añadir el   usuario o grupo adecuado. Realce   la cuenta de ASP.NET, y compruebe el   cajas para el acceso deseado.

     

Fuente de error:

     

fue generado una excepción no controlada   durante la ejecución de la corriente   solicitud web. La información relativa a la   origen y la ubicación de la excepción   puede ser identificado usando la excepción   Seguimiento de la pila a continuación.

     

Seguimiento de la pila:

     

[UnauthorizedAccessException: Acceso   a la trayectoria   'C: \ sitios de Internet \ misitioweb \ myfile.xml' es   negado.]
  System.IO .__ Error.WinIOError (Int32   errorCode, Cadena maybeFullPath)   +12892935 System.IO.FileStream.Init (camino String,   FileMode modo, el acceso FileAccess,   los derechos Int32, useRights booleanas,   Compartir FileShare, Int32 bufferSize,   Opciones FileOptions,   SECURITY_ATTRIBUTES secAttrs, Cadena   MSGPATH, Boolean bFromProxy, Boolean   useLongPath) 2481
  System.IO.FileStream..ctor (String   camino, el modo de FileMode, FileAccess   acceso, FileShare acción, Int32   bufferSize, opciones FileOptions,   MSGPATH cadena, booleano bFromProxy)   229 System.IO.FileStream..ctor (String   camino, el modo de FileMode, FileAccess   acceder, compartir FileShare) 102
  System.Xml.XmlWriterSettings.CreateWriter (String   OutputFileName) +5224496
  System.Xml.Linq.XElement.Save (String   nomArchivo, opciones SaveOptions) 108
  mesoBoard.Services.SiteConfig.UpdateCache ()   1971 mesoBoard.Web.MvcApplication.OnApplicationStarted ()   62 Ninject.Web.Mvc.NinjectHttpApplication.Application_Start ()   604

     

[HttpException (0x80004005): El acceso a la   el camino   'C: \ sitios de Internet \ misitioweb \ myfile.xml' es   negado.]
  System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode (HttpContext   contexto, HttpApplication app) +3985477   System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS (IntPtr   appContext, HttpContext contexto,   MethodInfo [] manipuladores) 191
  System.Web.HttpApplication.InitSpecial (HttpApplicationState   estatales, MethodInfo [] manipuladores, IntPtr   appContext, HttpContext contexto) 325   System.Web.HttpApplicationFactory.GetSpecialApplicationInstance (IntPtr   appContext, HttpContext contexto) 407   System.Web.Hosting.PipelineRuntime.InitializeApplication (IntPtr   appContext) 375

     

[HttpException (0x80004005): El acceso a la   el camino   'C: \ sitios de Internet \ misitioweb \ myfile.xml' es   negado.]
  System.Web.HttpRuntime.FirstRequestInit (HttpContext   contexto) +11524352
  System.Web.HttpRuntime.EnsureFirstRequestInit (HttpContext   contexto) 141
  System.Web.HttpRuntime.ProcessRequestNotificationPrivate (IIS7WorkerRequest   wr, HttpContext contexto) +4782309

¿Fue útil?

Solución

Es necesario asegurarse de que la cuenta de usuario del grupo de aplicaciones que ejecuta el sitio web ha leído / permisos de escritura al archivo / carpeta. Por defecto, creo que usted debe tener permisos de lectura, pero no permisos de escritura. Además, por razones de seguridad, que podría ser una buena idea para mover ese archivo fuera de la carpeta wwwroot en algo que no se puede corromper toda su aplicación.

  

WebDir / datos
  WebDir / datos / myfile.xml

     

WebDir / wwwroot
  WebDir / wwwroot / default.aspx

Otros consejos

Sus sonidos de permisos IO como es sólo un problema de permisos con su archivo. Yo sé lo que cada vez que subo un archivo a mi proveedor de alojamiento, tengo que acceder a su panel de control y dar manualmente el acceso a la cuenta IIS escribir en él, como el acceso de lectura es el único permiso concedido de forma automática.

Por otro lado, la ubicación del archivo XML plantea un problema de seguridad. Trate de poner el archivo en la carpeta "~ / App_Data /", que es una carpeta especial .NET que está más restringida que la carpeta de datos - en el momento en que pude ir a www.yoursite.com/data/myfile.xml y descargarlo, mientras que cualquier archivo en la carpeta App_Data no se puede descargar a través de Internet.

¿Qué es la carpeta App_Data utilizado para en Visual Studio?

Está utilizando la clase XElement. El espacio de nombres "System.Xml.Linq" probablemente no está permitido en la configuración de alojamiento "nivel medio". Para utilizar LINQ en la confianza de nivel medio, por favor siga el

confianza medio especifica que la aplicación sólo tiene acceso a los $ AppDir. Puede personalizar el nivel de confianza medio para agregar un acceso adicional a la confianza medio alterando la FileIOPermission para incluir otros directorios de $ AppDir. Sin embargo, he encontrado que cuando se llama a Server.MapPath ( "/") bajo incluso una personalizada Medio Nivel de confianza, por lo que recibirá una solicitud de excepción "para el permiso de tipo 'System.Security.Permissions.FileIOPermission, mscorlib, versión = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089' fallido "

Es mi teoría de que esto se debe a que está solicitando el acceso al sistema de archivos fuera de la de los $ AppDir". Terminamos tener que quitar todas las llamadas a Server.MapPath () desde nuestras aplicaciones web.

I creó un sitio web en GoDaddy y se encontró que la única manera de que pudiera permitir el acceso de escritura, era permitir que el toda raíz de la web , pero que podría haber sido sólo la restricción para ese plan de alojamiento ?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top