IIS与ASP.NET授权 - 保护静态文件的最简单方法?

时间:2009-06-18 21:04:44

标签: asp.net iis authorization

假设我在web.config中有以下内容:

<allow roles="Developers" />
<deny users="*"/>

这会锁定对.aspx,.asmx和其他.NET文件类型的访问,但它仍然允许未经授权的用户打开像image.jpg这样的静态文件。我理解为什么当有人要求image.jpg(它不是.NET类型,IIS可以绕过它)时,web.config不会被要求提供授权信息,但是如何锁定整个应用程序呢?

我在网上找到的建议包括:

  • 为相关目录创建一个<location>条目,IIS / .NET将对其进行选择。 (似乎没有。)
  • 您需要编写自己的ISAPI过滤器并将所有敏感文件的扩展名映射到该过滤器。
  • 您不需要编写自己的ISAPI过滤器 - 只需将扩展名映射到aspnet_isapi.dll即可。
  • 您根本不需要编辑IIS,只需在web.config中为您的扩展创建一个httpHandler条目。 (我真的不想尝试为应用程序中的每个扩展名执行此操作。)

这一切都不像我记得在Apache中那么容易。什么是最简单的事情可能会向访问者询问密码而不向任何没有密码的用户提供任何文件(静态或非静态)?

2 个答案:

答案 0 :(得分:2)

一个很简单的方法是升级到IIS 7-它现在有一个集成的管道。

答案 1 :(得分:2)

启用wild card mapping for IIS 6。这将通过ASP.NET管道发送所有文件,保证表格身份验证适用于所有文件。它会降低性能(不知道多少)。

对于IIS 5,嗯,升级到IIS 6。

您列出了4个想法:

  • 位置仅在您使用通配符映射(或映射了特定扩展名)时才有效。

  • 谁想写一个isapi过滤器?除非你有IIS7,否则你无法在托管语言中轻松完成。谁想写一个c ++ isapi过滤器?

  • 外卡映射确实适用于上述警告(性能)

  • 同样,如果没有使用IIS注册这些特定扩展并通过aspnet路由它们,最后一个选项将无法工作。