![使用 IIS8 下的表单身份验证保护静态内容](https://linux22.com/image/612090/%E4%BD%BF%E7%94%A8%20IIS8%20%E4%B8%8B%E7%9A%84%E8%A1%A8%E5%8D%95%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81%E4%BF%9D%E6%8A%A4%E9%9D%99%E6%80%81%E5%86%85%E5%AE%B9.png)
我在 IIS8(Windows 2012)服务器上托管了一个 ASP.NET(.Net 4)网站,并已设置表单身份验证。一切运行正常。
我现在想引入一些静态内容 - HTML“帮助文件” - 但我不希望这些是“深度链接”的;换句话说,这些页面只有在用户经过身份验证时才可用。
在 Google 上搜索后,我找到了一些关于如何实现此目的的参考资料。因此,在我的 web.config 中,我删除了所有无用的内容:
<compilation>
<buildProviders>
<add extension=".html" type="System.Web.Compilation.PageBuildProvider" />
<add extension=".htm" type="System.Web.Compilation.PageBuildProvider" />
</buildProviders>
</compilation>
和
<handlers>
<add name="WebServiceHandlerFactory-ISAPI-4.0_32bit" path="*.asmx,*.html" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="WebServiceHandlerFactory-ISAPI-4.0_64bit" path="*.asmx,*.html" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
</handlers>
...但是未经身份验证时我仍然可以访问 HTML 文件。
有人能指出哪里出了问题吗?以及我该如何保护静态 HTML 内容?
答案1
确保 IIS 正在运行集成模式为了使以下操作能够进行。
以下是Web.config
您可以放在子文件夹中的完整文件,并假设已设置身份验证(例如表单身份验证)。
或者,提取授权和处理程序部分,并将其添加到您的根目录Web.config
。
<?xml version="1.0"?>
<configuration>
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
<system.webServer>
<handlers>
<add name="HTML" path="*.html" verb="GET, HEAD, POST, DEBUG" type="System.Web.StaticFileHandler" />
<add name="CSS" path="*.css" verb="GET, HEAD, POST, DEBUG" type="System.Web.StaticFileHandler" />
<add name="JS" path="*.js" verb="GET, HEAD, POST, DEBUG" type="System.Web.StaticFileHandler" />
<add name="PNG" path="*.png" verb="GET, HEAD, POST, DEBUG" type="System.Web.StaticFileHandler" />
</handlers>
</system.webServer>
</configuration>
答案2
您可以指定位置标签并将整个文件夹列入白名单。
<location path="YourFiles">
<system.web>
<authorization>
<allow users="?" />
</authorization>
</system.web>
</location>
答案3
您是否尝试过 Handler?
将其放在您的 Web.Config 文件中并查看是否有帮助。
PS:未经测试。