IIS 对比ASP.NET 授权 - 保护静态文件的最简单方法?
-
06-07-2019 - |
题
假设我的 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 - 它现在有一个集成的管道。
不隶属于 StackOverflow