Какая разница в ненадежности браузера и веб-клиента? - PullRequest
0 голосов
/ 14 декабря 2010

У меня есть страница ASP.Net, которая выполняет некоторые операции ввода-вывода файлов. Когда я запрашиваю его в веб-браузере, а именно в chrome, он успешно выполняется, но когда я запрашиваю его из экземпляра WebClient в моем приложении, он выдает «System.Security.SecurityException». Существуют ли существенные различия в двух запросах? Что мне нужно знать о безопасности доступа к коду, чтобы эта страница работала из моего веб-клиента?

Вот необработанные запросы и ответы fiddler:

Запрос браузера:

GET http://192.168.1.89/QuickCutConsoleDataProvider/UpdateItemFiles.aspx HTTP/1.1
Host: 192.168.1.89
Proxy-Connection: keep-alive
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.224 Safari/534.10
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

Ответ браузера:

HTTP/1.1 200 OK
Via: 1.1 PHOBOS
Connection: Keep-Alive
Proxy-Connection: Keep-Alive
Content-Length: 35189
Date: Tue, 14 Dec 2010 14:08:46 GMT
Content-Type: application/zip
Server: Microsoft-IIS/7.5
Cache-Control: private
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET

... Binary Content ...

Запрос веб-клиента:

POST http://192.168.1.89/QuickCutConsoleDataProvider/UpdateItemFiles.aspx?Guid=e30e1826-3d96-4769-a540-acd911cccf02 HTTP/1.1
Content-Type: multipart/form-data; boundary=---------------------8cd697dcbf75ed4
Host: 192.168.1.89
Content-Length: 303
Expect: 100-continue

-----------------------8cd697dcbf75ed4
Content-Disposition: form-data; name="file"; filename="Catalog.xml"
Content-Type: application/octet-stream

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<catalog version="1.0">
  <items />
</catalog>
-----------------------8cd697dcbf75ed4--

Ответ веб-клиента (исключение):

HTTP/1.1 200 OK
Via: 1.1 PHOBOS
Connection: Keep-Alive
Proxy-Connection: Keep-Alive
Content-Length: 1244
Date: Tue, 14 Dec 2010 14:12:34 GMT
Content-Type: text/xml; charset=utf-8
Server: Microsoft-IIS/7.5
Cache-Control: private
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET

<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.File.GetLastWriteTimeUtc(String path)
   at Ionic.Zip.ZipEntry.Create(String nameInArchive, ZipEntrySource source, Object arg1, Object arg2)
   at Ionic.Zip.ZipEntry.CreateFromFile(String filename, String nameInArchive)
   at Ionic.Zip.ZipFile.AddFile(String fileName, String directoryPathInArchive)
   at Ionic.Zip.ZipFile.AddFile(String fileName)
   at MyApplication.UpdateItemFiles.GetUpdateContent(XDocument a_xManifest, Stream[] a_arrExtraContent) in C:\Software\MyApplication\Alpha\Web Interface\UpdateItemFiles.aspx.cs:line 282
   at MyApplication.UpdateItemFiles.Page_Load(Object sender, EventArgs e) in C:\Software\MyApplication\Alpha\Web Interface\UpdateItemFiles.aspx.cs:line 31]]></stack-trace>
  <inner-exception>null</inner-exception>
</error>

Ответы [ 2 ]

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

Проблема не имеет ничего общего с аутентификацией IIS. Это была библиотека Zip, которую я использовал, DotNetZip. CAS не желал давать ему разрешения на ввод-вывод файлов. Наконец мне пришлось прокси-операции ввода-вывода с файловыми потоками. Единственным недостатком является то, что когда-либо файл, который я хотел добавить в Zip-архив, мне приходилось оставлять поток открытым, пока архив не был сохранен. Это были файловые потоки, поэтому использовалось очень мало памяти.

Кто-то упомянул WCF, и это было бы идеально, но лицо, принимающее решение, решило, что этот способ дорогой.

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

Это все еще работает в Windows-аутентификации - хотя вы считаете, что изменили ее.Бьюсь об заклад, олицетворение также включено.

Дважды проверьте аутентификацию.Выложите некоторый код отладки, чтобы зарегистрировать текущий идентификатор, когда он выполняет операцию ввода-вывода.

...