【问题标题】:Protecting Executable Download in ASP.NET保护 ASP.NET 中的可执行下载
【发布时间】:2012-07-11 23:23:04
【问题描述】:

我有一个可执行文件,我想限制谁可以下载。我有 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 页面的不同资源,但我看到了相同的问题,即使用户确实属于适当的角色,也会被重定向到登录页面。

提前致谢。

【问题讨论】:

  • 请发布您的授权配置 - 这样我们都可以看到您是如何实现自己的角色的。另一方面:我假设您说您确实属于“SomeRole”角色,但该网站正在将您踢到登录页面,什么时候应该允许下载?
  • @Adam 我不确定您所说的授权配置是什么意思,如果您指的是 system.web/authorization 部分,那么我已经发布了。否则,请更具体地说明您的意思。是的,我用来下载可执行文件的用户确实属于正确的角色。

标签: asp.net iis-7


【解决方案1】:

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

您可以在此处阅读更多信息: URL-authorization and non-Asp.Net related file types 和这里: Does web.config authorization work on files other than aspx?

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

就个人而言,我会保护一个目录路径,而不是一个文件,因为它可以在未来证明文件名不会发生变化。

【讨论】:

  • 这不可能是这里的问题。 Op 表示使用用户名而不是角色时效果很好。
  • 感谢有关保护文件夹而不是文件的建议。不幸的是,这不起作用。我发布了更新,看来我的问题不仅仅是保护 *.exe,我无法按角色保护任何资源并使其正常工作。
猜你喜欢
  • 2020-08-01
  • 1970-01-01
  • 2012-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-21
  • 2021-10-01
  • 1970-01-01
相关资源
最近更新 更多