【问题标题】:asp.net security exception ''System.Security.Permissions.FileIOPermission' using DotNetZip使用 DotNetZip 的 asp.net 安全异常“System.Security.Permissions.FileIOPermission”
【发布时间】:2014-06-16 00:38:26
【问题描述】:

我已将 DotNetZip dll 集成到 ASP.net/VB 项目中。但是当我尝试打开一个文件进行阅读时,我得到了一个安全异常:

System.Security.SecurityException: Request for the permission of type 
'System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, 
Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.

我查看了很多地方来寻求有关此错误的帮助(包括此站点上的几个),但似乎没有任何效果。我得到的印象是我需要设置我的应用程序的信任级别。当我的应用程序完成后,它需要存在于我的客户端服务器上,在那里我无法访问他们的 IIS 配置。我咨询过的一些网站说要在我的 web.config 文件中执行此操作。从 MSDN 和其他地方,我尝试了以下变化:

    <system.web>
          <trust level="Full" />
    </system.web>

不好。我将目标 zip 文件放在 app 目录中以简化操作,并检查我对该目录是否具有完全权限。还是不行。

谁能告诉我如何正确设置我的应用的信任级别,或者我是否需要做其他事情?如果有人感兴趣,这是堆栈跟踪。谢谢。

[SecurityException: Request for the permission of type    
'System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, 
Culture=neutral,
PublicKeyToken=b77a5c561934e089' failed.]
System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& 
stackMark, Boolean isPermSet) +0
System.Security.CodeAccessPermission.Demand() +61
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) +644
System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare 
share) +66
Ionic.Zip.ZipFile.get_ReadStream() +75
Ionic.Zip.ZipFile.ReadIntoInstance(ZipFile zf) +46
Ionic.Zip.ZipFile.Read(String fileName, TextWriter statusMessageWriter, Encoding 
Ionic.Zip.ZipFile.Read(String fileName) +11
CodeBehind.Page_Load(Object sender, EventArgs e) in W:\research\httpdoc\uploader
\index.aspx.vb:45
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +50
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean 
includeStagesAfterAsyncPoint) +6785
System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean 
includeStagesAfterAsyncPoint) +242
System.Web.UI.Page.ProcessRequest() +80
System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context) +21
System.Web.UI.Page.ProcessRequest(HttpContext context) +49
ASP.index_aspx.ProcessRequest(HttpContext context) +37
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
+181
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& 
completedSynchronously) +75

【问题讨论】:

  • 抛出此异常时,您的应用程序尝试从哪里读取文件?即:uploader \index.aspx.vb 中的Page_Load 方法传递给ZipFile.Read 的文件路径是什么?
  • @Nicole Calinoiu,感谢您的回复。我尝试将文件放在几个不同的位置,包括我的应用程序文件(aspx 文件)所在的同一目录。我想我肯定有权从那里阅读它。如果我让它工作,我的用户将需要打开位于他们本地计算机上的 zip 文件。

标签: asp.net vb.net security web-config dotnetzip


【解决方案1】:

如果有人读过这篇文章并遇到同样的问题,我切换到另一个包,SharpZipLib 包可用here。似乎没有安全问题。

【讨论】:

    【解决方案2】:

    您需要检查该文件夹的所有 iis 用户和权限。 为此 rdp 您的服务器访问 iis 选择站点浏览目录。找到需要权限的目录,选择它单击它右键单击 => 属性 => 安全选项卡。 检查您的用户并检查他们是否具有正确的权限。在安全选项卡中的编辑上单击不更新权限并更新您需要有权执行此操作的用户的权限。单击保存/确定我不记得并尝试再次。它应该可以解决您的问题。

    【讨论】:

    • 感谢您的回复。但正如我所说,这个实用程序需要驻留在我的客户端服务器上,我无法访问 IIS 设置。知道如何使用我的 web.config 文件来做到这一点吗?
    • 你不能。权限只能通过 iss 或控制面板或电源板和高级工具或最后的解决方案来设置您的主机设置权限,这是更简单的方法。跨度>
    • @Stanton 当您谈论应用程序目录时,您是指 root 还是 App_Data。您可以添加对 App_Data 的权限并尝试此操作,但我认为它不会解决问题。
    • 谢谢钱。我想你可能是对的。我想我沉没了。
    猜你喜欢
    • 2010-12-02
    • 2016-07-05
    • 2010-09-19
    • 1970-01-01
    • 2010-11-29
    • 2023-03-28
    • 2010-11-26
    • 1970-01-01
    相关资源
    最近更新 更多