Назад | Перейти на главную страницу

Защита статического содержимого с помощью проверки подлинности с помощью форм в IIS8

У меня есть сайт ASP.NET (.Net 4), размещенный на сервере IIS8 (Windows 2012), с проверкой подлинности форм. Все работает нормально.

Теперь я хотел бы представить некоторый статический контент - «файлы справки» 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-контент?

Убедитесь, что 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>

Вы можете указать тег Location и занести в белый список всю папку.

<location path="YourFiles">
    <system.web>
    <authorization>
        <allow users="?" />
    </authorization>
    </system.web>
</location>

Вы пробовали Handlers?

Поместите это в свой файл Web.Config и посмотрите, поможет ли это.

P.S. Не проверено.