У меня есть сайт 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. Не проверено.