Разрешение файла среднего доверия ввода / вывода

StackOverflow https://stackoverflow.com/questions/3126337

  •  30-09-2019
  •  | 
  •  

Вопрос

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

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

Однако для моего текущего хостинга провайдер запускает приложения в среднем доверие и когда я пытаюсь прочитать / написать файл в корневой папке приложения, я получаю 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 к файлу, щелкните правой кнопкой мыши файл в Explorer, выберите «Свойства» и выберите вкладку «Свойства». Нажмите «Добавить», чтобы добавить соответствующего пользователя или группу. Выделите учетную запись ASP.NET и установите флажки для желаемого доступа.

Исходная ошибка:

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

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

UnauthorizedAccessException: доступ к пути «C: Websites MyWebsite myfile.xml» запрещен.
System.io .__ Error.WinioError (INT32 ErrorCode, String CoverfullPath) +12892935 System.io.fileStrews.init (строковый путь, режим FileMODE, FILEACCESS, INT32 Права, Boolean Userys, FileShare Share, attributes secattrs , Строка Msgpath, Boolean Bfromproxy, Boolean UselongPath) +2481
System.io.fileStrewream..tor (режим строки, режим filemode, fileацесс, доступ fileshare, int32 buffersize, параметры fileoptions, строка msgpath, boolean bfromproxy) +229 system.io.fileStream..tor (строковый путь, режим Filemode, Доступ Fileabess, Fileshare Share) +102
System.xml.xmlwritersettings.CreateWriter (String offfialfileName) +5224496
System.xml.linq.xElement.save (строковые имени файла, параметры конфигурации) +108
mesoboard.services.siteconfig.updatecache () +1971 mesoboard.web.mvcapcaplication.OnApplicationStarted () +62 Ninject.Web.mvc.ninjectHttpaplication.Application_start () +604

HttpException (0x80004005): доступ к пути «C: Websites myWebsite myfile.xml» запрещен.
System.Web.httpapplicationFactory.ensureapPstartCalledForinegratedMode (httpContext Context, приложение httpapplication) +3985477 System.web.httpapplication.registereventsubscriptionsWithiis (INTPTR AppContext, контекст HTTPContext, методинфонфонфон []) +191
System.Web.httpApplication.Initspecial (состояние httpapplicationState, методинфонфон [] обработчики, Intptr appcontext, контекст httpcontext) +325 system.web.httpapplicationFactance (INTPTR appcontext, контекст httpcontext) +407 system.web.hosting.pipelineruntime.Италиазопликация. INTPTR AppContext) +375

HttpException (0x80004005): доступ к пути «C: Websites myWebsite myfile.xml» запрещен.
System.Web.htttpruntime.firstrequestinit (контекст httpContext) +11524352
System.Web.htttpruntime.ensurefirstrequestinit (контекст httpContext) +141
System.Web.htttpruntime.processrequestnoticationPrivate (iis7workerrequest wr, httpcontext context) +4782309

Это было полезно?

Решение

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

webdir / data.
Вебдир / Данные /myfile.xml.

webdir / wwwroot.
webdir / wwwroot / default.aspx

Другие советы

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

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

Какая папка App_Data используется для в Visual Studio?

Вы используете класс XElement. Простовое пространство «System.xml.linq», вероятно, не разрешено в вашем хостинге «среднего уровня» конфигурации. Использовать LINQ в среднем уровне доверия, пожалуйста, следуйте следующим процедура

Среднее доверие Указывает, что приложение имеет доступ только к $ AppDir. Вы можете настроить уровень доверия среднего доступа для добавления дополнительного доступа к среднему доверию, изменив файлоопрепараты, чтобы включить другие каталоги, чем $ appdir. Тем не менее, я обнаружил, что при вызове Server.Mappath («/») по чечному уровню индивидуального среднего доверия вы получите исключение «Запрос разрешения типа» System.Security.Permissions.fileioPermission, MSCorlib, версия = 4.0.0.0, Культура = Нейтральная, PublicHyToken = B77A5C561934E089 'Ошибка "

Это моя теория, что это потому, что вы запрашиваете доступ к файловой системе за пределами $ appdir ". Мы закончили удалить все вызовы на Server.mappath () из наших веб-приложений.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top