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

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

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

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

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

这些都不像我记忆中在 Apache 中那么容易工作。向访问者询问密码并且不向任何没有密码的用户提供任何文件(静态或非静态)的最简单的方法是什么?

有帮助吗?

解决方案

使能够 IIS 6 的通配符映射. 。这将通过 ASP.NET 管道发送所有文件,保证所有文件都进行表单身份验证。它会降低性能(不知道多少)。

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

你列出了 4 个想法:

  • 仅当您有通配符映射(或映射的特定扩展名)时,位置才有效。

  • 谁想写一个 isapi 过滤器?除非您有 IIS7,否则您无法轻松地使用托管语言来完成此操作。谁想写一个 C++ isapi 过滤器?

  • 通配符映射确实适用于上述警告(性能)

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

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top