Разрешение ввода-вывода для файлов среднего уровня доверия - PullRequest
5 голосов
/ 27 июня 2010

Согласно этой статье MSDN о среднем доверии , при среднем доверии:

FileIOPermission ограничен. это означает, что вы можете получить доступ только к файлам в виртуальный каталог вашего приложения иерархия. Ваша заявка удовлетворена Чтение, запись, добавление и обнаружение пути разрешения для вашего приложения иерархия виртуальных каталогов.

Однако мой текущий хостинг-провайдер запускает приложения со средним уровнем доверия, и когда я пытаюсь прочитать / записать файл в корневой папке приложения, я получаю ошибку access to path 'myfile.xml' denied.

Этот файл читается с использованием следующего бита кода

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

Ошибка полного обновления:

Доступ к пути C: \ WebSites \ mywebsite \ myfile.xml отказано.

Описание: необработанное исключение произошло во время исполнения текущий веб-запрос. Пожалуйста, просмотрите трассировка стека для получения дополнительной информации о ошибка и откуда она возникла код.

Сведения об исключении: System.UnauthorizedAccessException: Доступ к пути C: \ WebSites \ mywebsite \ myfile.xml отказано.

ASP.NET не авторизован для доступа запрашиваемый ресурс. Рассматривать предоставление прав доступа к ресурсу к идентичности запроса ASP.NET. ASP.NET имеет базовый идентификатор процесса (обычно {MACHINE} \ ASPNET на IIS 5 или Сетевой сервис на IIS 6 и IIS 7, и настроенный пул приложений идентификатор на IIS 7.5), который используется, если приложение не олицетворяет. Если приложение олицетворяет с помощью , личность будет анонимной пользователь (обычно IUSR_MACHINENAME) или аутентифицированный пользователь запроса.

Чтобы предоставить ASP.NET доступ к файлу, щелкните правой кнопкой мыши файл в проводнике, выберите «Свойства» и выберите Вкладка «Безопасность». Нажмите «Добавить», чтобы добавить соответствующий пользователь или группа. основной момент учетную запись ASP.NET и проверьте коробки для желаемого доступа.

Ошибка источника:

Создано необработанное исключение во время исполнения текущего веб-запрос. Информация относительно Происхождение и место исключения можно определить с помощью исключения трассировка стека ниже.

Трассировка стека:

[UnauthorizedAccessException: доступ к пути C: \ WebSites \ mywebsite \ myfile.xml отказано.]
System.IO .__ Error.WinIOError (Int32 errorCode, String MaybeFullPath) +12892935 System.IO.FileStream.Init (String path, Режим FileMode, доступ к FileAccess, Права Int32, логические права использования, Общий доступ к FileShare, размер буфера Int32, Опции FileOptions, SECURITY_ATTRIBUTES secAttrs, String msgPath, логическое значение bFromProxy, логическое значение useLongPath) + 2481
System.IO.FileStream..ctor (String путь, режим FileMode, FileAccess доступ, общий доступ к FileShare, Int32 bufferSize, параметры FileOptions, Строка msgPath, логическое bFromProxy) +229 System.IO.FileStream..ctor (String путь, режим FileMode, FileAccess доступ, обмен FileShare) + 102
System.Xml.XmlWriterSettings.CreateWriter (String outputFileName) + 5224496
System.Xml.Linq.XElement.Save (String имя файла, параметры SaveOptions) + 108
mesoBoard.Services.SiteConfig.UpdateCache () +1971 mesoBoard.Web.MvcApplication.OnApplicationStarted () +62 Ninject.Web.Mvc.NinjectHttpApplication.Application_Start () + 604

[HttpException (0x80004005): доступ к путь C: \ WebSites \ mywebsite \ myfile.xml отказано.]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode (HttpContext контекст, приложение HttpApplication) +3985477 System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS (IntPtr appContext, контекст HttpContext, Обработчики MethodInfo []) + 191
System.Web.HttpApplication.InitSpecial (HttpApplicationState состояние, обработчики MethodInfo [], IntPtr appContext, контекст HttpContext) +325System.Web.HttpApplicationFactory.GetSpecialApplicationInstance (IntPtr appContext, контекст HttpContext) +407 System.Web.Hosting.PipelineRuntime.InitializeApplication (IntPtr appContext) + 375

[HttpException (0x80004005): доступ к путь C: \ WebSites \ mywebsite \ myfile.xml отказано.]
System.Web.HttpRuntime.FirstRequestInit (HttpContext контекст) + 11524352
System.Web.HttpRuntime.EnsureFirstRequestInit (HttpContext контекст) + 141
System.Web.HttpRuntime.ProcessRequestNotificationPrivate (IIS7WorkerRequest wr, контекст HttpContext) + 4782309

Ответы [ 5 ]

1 голос
/ 27 июня 2010

Необходимо убедиться, что учетная запись пользователя пула приложений, на котором запущен веб-сайт, имеет разрешения на чтение / запись для файла / папки. По умолчанию, я думаю, у вас должны быть права на чтение, но не права на запись. Кроме того, по соображениям безопасности было бы неплохо переместить этот файл из папки wwwroot во что-то, что не может повредить все ваше приложение.

webdir / данные
webdir / data / myfile.xml

webdir / Wwwroot
webdir / Wwwroot / default.aspx

0 голосов
/ 04 сентября 2014

Среднее доверие указывает, что приложение имеет доступ только к $ AppDir.Вы можете настроить средний уровень доверия, чтобы добавить дополнительный доступ к среднему доверию, изменив FileIOPermission для включения других каталогов, кроме $ AppDir.Тем не менее, я обнаружил, что при вызове Server.MapPath ("/") даже с настроенным средним уровнем доверия, вы получите исключение "Запрос на разрешение типа 'System.Security.Permissions.FileIOPermission, mscorlib, Version =4.0.0.0, Культура = нейтральная, PublicKeyToken = b77a5c561934e089 'ошибка'

Моя теория заключается в том, что вы запрашиваете доступ к файловой системе вне $ AppDir ". В итоге нам пришлось удалитьвсе вызовы Server.MapPath () из наших веб-приложений.

0 голосов
/ 08 июля 2010

Я настроил веб-сайт на GoDaddy и обнаружил, что единственный способ, которым я мог разрешить доступ на запись, - это включить его для всего веб-корня , но это могло быть только ограничением для этого плана хостинга?

0 голосов
/ 27 июня 2010

Вы используете класс XElement.Пространство имен «System.Xml.Linq», вероятно, не разрешено в конфигурации вашего хостинга «среднего уровня».Чтобы использовать Linq в доверительном управлении среднего уровня, выполните следующую процедуру

0 голосов
/ 27 июня 2010

Ваше разрешение ввода-вывода звучит так, будто это просто проблема с разрешением вашего файла. Я знаю, что всякий раз, когда я загружаю файл своему провайдеру хостинга, мне приходится входить в его панель управления и вручную предоставлять ему доступ для записи учетной записи IIS, поскольку доступ на чтение является единственным разрешением, предоставляемым автоматически.

С другой стороны, местоположение вашего xml-файла создает проблему безопасности. Попробуйте поместить файл в папку «~ / App_Data /», это специальная папка .NET, которая более ограничена, чем ваша папка с данными - сейчас я могу зайти на www.yoursite.com/data/myfile.xml и загрузить его тогда как любой файл в папке App_Data не может быть загружен через Интернет.

Для чего используется папка App_Data в Visual Studio?

...