使用 IIS8 下的表单身份验证保护静态内容

使用 IIS8 下的表单身份验证保护静态内容

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

相关内容