Почему мои ASPX-страницы не могут обращаться к каталогам самого веб-сервера? - PullRequest
0 голосов
/ 13 декабря 2010

У меня есть веб-клиент, который отправляет запрос в виде XML на мой веб-сервер. Веб-сервер создает (довольно большой) файл, сохраняет его в кэшированном каталоге и возвращает его веб-клиенту через поток ответов. Это работало нормально первые пару раз, когда я пытался, но внезапно оно перестало работать и сообщило о следующем исключении (в XML):

<error type="System.Security.SecurityException">
  <message>Request for the permission of type 'System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.</message>
  <stack-trace><![CDATA[   at System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet)
   at System.Security.CodeAccessPermission.Demand()
   at 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)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
   at System.IO.FileStream..ctor(String path, FileMode mode)
   at Ionic.Zip.SharedUtilities.CreateAndOpenUniqueTempFile(String dir, Stream& fs, String& filename)
   at Ionic.Zip.ZipFile.get_WriteStream()
   at Ionic.Zip.ZipFile.Save()
   at Ionic.Zip.ZipFile.Save(String fileName)
   at MyApplication.UpdateItemFiles.GetUpdateContent(XDocument a_xManifest, Stream[] a_arrExtraContent) in C:\Software\MyApplication\Alpha\Web Interface\UpdateItemFiles.aspx.cs:line 265
   at MyApplication.UpdateItemFiles.Page_Load(Object sender, EventArgs e) in C:\Software\MyApplication\Alpha\Web Interface\UpdateItemFiles.aspx.cs:line 31]]></stack-trace>
</error>

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

Я использую 64-разрядную версию Visual Studio 2008 для Windows 7 как для сервера, так и для клиента (на одной машине). Я использую IIS 7.0 и .Net Framework 3.5.

Отредактировано 2010/12/13 16:05 EST:

Я получаю эту ошибку, потому что я использую библиотеку DotNetZip из Codeplex. Есть ли способ добавить сборку в IIS или мою конфигурацию?

Ответы [ 3 ]

1 голос
/ 13 декабря 2010

Вместо того, чтобы изменять настройки безопасности самого пользователя вашего приложения ASP.NET, я бы предложил создать новое приложение для доступа к файлам (возможно, службу Windows, доступную через удаленное взаимодействие, может быть WCF), которое осуществляет доступ к файлу.Это приложение может работать с использованием контекста, необходимого для доступа к файлу.

Приложение ASP.NET должно иметь возможность только общаться с приложением доступа к файлу.Таким образом, ваши проблемы отделены, безопасность выше, и вам не нужно беспокоиться о том, какая учетная запись используется приложением ASP.NET или олицетворяет пользователей и т. Д.

1 голос
/ 13 декабря 2010

Поскольку пользователь, на котором работает ваш веб-сайт, имеет минимальные привилегии по умолчанию.Лучше всего сделать ставку на

  1. Создать нового пользователя с ТОЛЬКО необходимыми привилегиями - доступ к SQL, определенным папкам и т. Д.
  2. Настройте приложение для запуска под этим пользователем
  3. Включить олицетворение в web.config

Таким образом, вы можете сохранить изменения в privs локально для вашего приложения и избежать проблем с безопасностью из других приложений, работающих на том же сервере, что и пользователь по умолчанию.

0 голосов
/ 15 декабря 2010

Проблема была в сборке Iconic.Zip, которую я использовал для создания Zip-архивов.Сервер IIS не доверял ему, и поэтому он не проходил проверки безопасности доступа к коду.Мое решение состояло в том, чтобы создать потоки из моего собственного кода.Недостатком этого было то, что мне приходилось оставлять потоки открытыми до тех пор, пока я не сохранил архив, потому что тип ZipFile выполняет все операции чтения и записи одновременно.

...