2010-06-27 7 views
5

De acuerdo con esta MSDN article about medium trust, bajo a mediano confianza:mediano Confianza del archivo de E/S permiso

FileIOPermission is restricted. This means you can only access files in your application's virtual directory hierarchy. Your application is granted Read, Write, Append, and PathDiscovery permissions for your application's virtual directory hierarchy.

Sin embargo, para mi actual proveedor de alojamiento corre aplicaciones de bajo a mediano confianza y cuando trato de leer/escribir una archivo en la carpeta raíz de la aplicación, me sale un error 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:

Access to the path 'C:\WebSites\mywebsite\myfile.xml' is denied.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.UnauthorizedAccessException: Access to the path 'C:\WebSites\mywebsite\myfile.xml' is denied.

ASP.NET is not authorized to access the requested resource. Consider granting access rights to the resource to the ASP.NET request identity. ASP.NET has a base process identity (typically {MACHINE}\ASPNET on IIS 5 or Network Service on IIS 6 and IIS 7, and the configured application pool identity on IIS 7.5) that is used if the application is not impersonating. If the application is impersonating via , the identity will be the anonymous user (typically IUSR_MACHINENAME) or the authenticated request user.

To grant ASP.NET access to a file, right-click the file in Explorer, choose "Properties" and select the Security tab. Click "Add" to add the appropriate user or group. Highlight the ASP.NET account, and check the boxes for the desired access.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[UnauthorizedAccessException: Access to the path 'C:\WebSites\mywebsite\myfile.xml' is denied.]
System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) +12892935 System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath) +2481
System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy) +229 System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share) +102
System.Xml.XmlWriterSettings.CreateWriter(String outputFileName) +5224496
System.Xml.Linq.XElement.Save(String fileName, SaveOptions options) +108
mesoBoard.Services.SiteConfig.UpdateCache() +1971 mesoBoard.Web.MvcApplication.OnApplicationStarted() +62 Ninject.Web.Mvc.NinjectHttpApplication.Application_Start() +604

[HttpException (0x80004005): Access to the path 'C:\WebSites\mywebsite\myfile.xml' is denied.]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +3985477 System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +191
System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +325 System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +407 System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +375

[HttpException (0x80004005): Access to the path 'C:\WebSites\mywebsite\myfile.xml' is denied.]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +11524352
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +141
System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +4782309

+0

Por favor, muestre el rastro completo de la pila y el mensaje de la excepción No está claro si se trata de una excepción de seguridad CAS (CLR) o un permiso de archivo NTFS – Eilon

+0

@Elion - actualizado con error completo. – Omar

+0

¿Qué versión de IIS está usando? ¿Hay algún otro proceso que pueda bloquear el archivo myfile.xml? – jrista

Respuesta

1

Usted necesita asegurarse de que la cuenta de usuario del grupo de aplicaciones que ejecuta el sitio web tiene permisos de lectura/escritura para el archivo/carpeta. De forma predeterminada, creo que debería haber leído los permisos pero no los permisos de escritura. Además, por razones de seguridad, podría ser una buena idea mover ese archivo de la carpeta wwwroot a algo que no pueda dañar toda la aplicación.

webdir/data
webdir/data/myfile.xml

webdir/wwwroot
webdir/wwwroot/default.aspx

+0

¿Hay alguna forma de leer/escribir archivos sin tener que asegurarme de que los permisos estén ahí? Quiero decir, si mi aplicación está destinada a crear nuevos archivos que necesitan acceso de lectura/escritura y mis usuarios no son expertos en tecnología, ¿hay alguna forma de evitarlo? – Omar

+0

Encontré información sobre la configuración de permisos de archivos aquí (http://www.experts-exchange.com/Web_Development/Miscellaneous/Q_23444174.html) o simplemente Google 'asp.net set file permissions' –

0

Su permiso de IO parece ser un problema de permiso con su archivo. Sé que cada vez que subo un archivo a mi proveedor de alojamiento, tengo que iniciar sesión en su panel de control y darle acceso de escritura a la cuenta IIS manualmente, ya que el acceso de lectura es el único otorgado automáticamente.

En otro aspecto, la ubicación de su archivo xml plantea un problema de seguridad. Intenta poner el archivo en la carpeta "~/App_Data /", es una carpeta .NET especial que está más restringida que tu carpeta de datos; en este momento podría ir a www.yoursite.com/data/myfile.xml y descargarla, mientras que cualquier archivo en la carpeta App_Data no se puede descargar a través de la web.

What is the App_Data folder used for in Visual Studio?

0

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

-1

He creado una página web en GoDaddy y descubrí que la única manera de que pudiera permitir el acceso de escritura, era permitir que el toda raíz web pero que podría acaban de ser la restricción para ese plan de hosting?

0

Medium Trust especifica que la aplicación solo tiene acceso al $ AppDir. Puede personalizar el nivel medio de confianza para agregar acceso adicional a la confianza media al alterar la FileIOPermission para incluir otros directorios que no sean $ AppDir. Sin embargo, descubrí que cuando llama a Server.MapPath ("/") incluso bajo un nivel de confianza medio personalizado, obtendrá una excepción "Solicitud de permiso de tipo 'System.Security.Permissions.FileIOPermission, mscorlib, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089 'failed'

Según mi teoría, esto se debe a que está solicitando acceso al sistema de archivos fuera del $ AppDir ". Terminamos teniendo que eliminar todas las llamadas a Server.MapPath() desde nuestras aplicaciones web

Cuestiones relacionadas