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

Настройте IIS для возврата 404 при попытках просмотра каталога

В IIS (6 или 7), когда просмотр каталогов отключен, IIS возвращает ошибку «403 - запрещено», когда обнаруживает попытку просмотра каталога (например, «http://mydomain.com/folder").

Есть ли способ настроить IIS для возврата ошибки «404 - Not Found» вместо «403» при попытках просмотра каталога? Проверка безопасности нашего сайта показала, что возвращение «403» может помочь злоумышленнику сопоставить наш сайт; не думал об этом раньше, но я должен признать, что это имеет смысл.

Это сайт веб-форм asp.net.

Этот вопрос был задан (Замените IIS 403 на 404 для списка каталогов), но единственный опубликованный ответ неверен. Добавление настраиваемой страницы ошибок не работает.

Мне не удалось найти способ настроить IIS, но я нашел обходной путь, используя общий обработчик asp.net (http://forums.asp.net/p/1478217/3453189.aspx, прокрутите вниз до ответа gvlahakis).

Сначала создайте общий обработчик, который возвращает 404:

public class DirectoryBrowsingAttempt : IHttpHandler
{
    public bool IsReusable {get {return true;}
    public void ProcessRequest(HttpContext context) {context.Response.StatusCode = 404;}
}

Во-вторых, добавьте теги в web.config, чтобы указать попытки просмотра каталогов указанному выше обработчику, по одному для каждой папки, которую необходимо защитить, в разделах httpHandlers и system.webServer. Приведенные ниже теги защищают папку с именем «js» от корня.

<httpHandlers>
  <add verb="*" path="js/*" validate="false" type="MyNameSpace.DirectoryBrowsingAttempt"/>
</httpHandlers>
<system.webServer>
<handlers>
  <add name="NoAccess" verb="*" path="js/*"  preCondition="integratedMode" type="MyNameSpace.DirectoryBrowsingAttempt"/>
</handlers>

Этот обходной путь отличается в IIS 6 от IIS 7. Например, я защитил папку, содержащую изображения сайта, следующим образом: IIS 6 по-прежнему доставлял изображения, содержащиеся в этой папке, на веб-страницы (желаемое поведение, я просто хочу заблокировать попытки просмотра каталога); IIS 7 заблокировал их.

Вероятно, есть способы использовать вкладку «местоположение» в web.config, чтобы разрешить обслуживание изображений, переопределив обработчик изображений по умолчанию, но я не хочу заходить так далеко в кроличью нору.