保护ASP.NET中的可执行文件下载

时间:2012-07-11 23:23:04

标签: asp.net iis-7

我有一个可执行文件,我想限制谁可以下载。我有UI修剪,因此当用户无权下载可执行文件时,链接不存在。我在web.config中加入了一条规则来保护资源免受未经授权的下载,但它似乎没有用。

<location path="Utilities/SomeTool.exe">
  <system.web>
    <authorization>
      <allow roles="SomeRole" />
      <deny users="*"/>
    </authorization>
  </system.web>
</location>

当我尝试下载资源时,我看到的是登录页面,如果用户不属于应该能够下载资源的角色,则会出现这种情况。

我可以更改web.config中的规则,以便它允许特定用户,并且我能够访问该特定用户的可执行文件,但这不起作用,因为我需要修改访问规则对于添加到角色的每个用户。

<location path="Utilities/SomeTool.exe">
  <system.web>
    <authorization>
      <allow users="MyUserName"/>
      <deny users="*"/>
    </authorization>
  </system.web>
</location>

我已经设置了web.config以利用IIS7中的集成管道,方法是按照this page的指示删除并重新添加模块列表。这应该设置我的网站将所有资源视为ASP.NET资源。

是否有人知道我在IIS7的配置中可能缺少什么来保护可执行文件?

我已经想到了我可以实现的其他解决方案,以保护可执行文件免受未经授权的下载,例如创建链接将调用并返回资源的Web服务。然后在Web服务中,我可以在返回可执行文件之前执行用户角色的验证。但这似乎比我应该经历的工作更多。

这是我web.config的system.web部分:

<system.web>
  <compilation debug="false" targetFramework="4.0" />
  <httpRuntime enableVersionHeader="false" requestValidationMode="2.0" />
  <customErrors mode="RemoteOnly">
    <error statusCode="404" redirect="~/MyErrorPage.aspx" />
  </customErrors>
  <authentication mode="Forms">
    <forms timeout="60" ticketCompatibilityMode="Framework40" />
  </authentication>
  <authorization>
    <deny users="?" />
  </authorization>
  <sessionState timeout="60" />
  <membership defaultProvider="MyMembershipProvider">
    <providers>
      <clear />
      <add name="MyMembershipProvider" type="MyMembershipProvider" applicationName="MyApp" />
    </providers>
  </membership>
  <roleManager defaultProvider="MyRoleProvider" enabled="true" cacheRolesInCookie="true" cookieTimeout="60">
    <providers>
      <clear />
      <add name="MyRoleProvider" type="MyRoleProvider" applicationName="MyApp" />
    </providers>
  </roleManager>
</system.web>

作为旁注,web.config在我的网站在Visual Studio 2010中托管时可以使用,但在IIS7中运行时会失败。

更新:我试图保护基于角色的* .html和* .aspx页面的不同资源,我看到同样的问题,即使用户确实属于相应的角色,也会被重定向到登录页面。 / p>

提前致谢。

1 个答案:

答案 0 :(得分:0)

您已经提到过IIS7集成模式,试图为所有文件类型调用ASP.net处理程序...

您可以在此处详细了解: URL-authorization and non-Asp.Net related file types 和这里: Does web.config authorization work on files other than aspx?

在我的脑海中,我至少会尝试将所有私有文件放在子目录中,并将位置安全性应用于目录,而不是实际文件本身。这可能会解决您的问题。

就个人而言,我会保护一个目录路径,而不是一个文件,因为它将来证明文件名的变化。