我在 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:未经测试。