Как защитить статические файлы с помощью аутентификации формы ASP.NET в IIS 7.5?

У меня есть веб-сайт, работающий на сервере IIS 7.5 с ASP.NET 4.0 на общем хосте, но в полном доверии.

Сайт является базовым «файловым браузером», который позволяет посетителям войти в систему и отобразить список доступных им файлов, и, очевидно, загрузить файлы. Статические файлы (в основном файлы PDF) расположены в подпапке на сайте с именем data, например http://example.com/data/ …

Сайт использует аутентификацию формы ASP.NET.

Мой вопрос: как заставить механизм ASP.NET обрабатывать запросы на статические файлы в папке с данными, так что запрос на файлы аутентифицируется ASP.NET, и пользователи не могут глубоко ссылаться на файл и файлы захвата им не разрешены?

С наилучшими пожеланиями, Эгил.

Если пул приложений запущен в интегрированном режиме, вы можете сделать следующее.

Добавьте в свой верхний уровень web.config.

         

Теперь вы можете использовать стандартные разрешения ASP.NET в своем web.config для принудительной проверки подлинности всех файлов в каталоге.

       

У меня была та же проблема с получением роли для аутентификации. Сквозь проб и ошибок я, наконец, получил его для работы с небольшим редактированием кода @Joel Cunningham:

  

Я использовал эти два сайта в качестве ссылок: http://forums.iis.net/t/1177964.aspx и http://learn.iis.net/page.aspx/244/how-to-take-advantage-of- заместитель МИС-интегрально-трубопровод /

Это старая нить, но я оказался на ней и столкнулся с той же проблемой, что и Эгил. Вот версия Joel’s fix, которая включает в себя роли:

           

Я хотел знать, почему потребуется повторная добавление модhive (с параметрами по умолчанию), которые по умолчанию добавляются для Integrated Pipeline, поэтому я немного углубился.

Вам необходимо удалить и повторно добавить модули, потому что по умолчанию модули не добавляются по умолчанию. У них есть предварительное условие для обратной совместимости для запуска только для контента, обрабатываемого зарегистрированным обработчиком ASP.NET (например, страницы .aspx).

Значение по умолчанию выглядит так:

  

Удаляя модули и повторно добавляя их без предварительного условия, эти отдельные модули запускаются для каждого запроса (включая статический контент). Он более гранулирован, чем включение runAllManagedModulesForAllRequests .

Вы можете прочитать об этом в нескольких статьях, когда Интегрированный трубопровод был представлен с IIS 7:

  • Интеграция ASP.NET с IIS 7
  • Как использовать интегрированный трубопровод IIS 7.0

Обратите внимание, что во второй статье (или ответ Джона) есть опечатка или имя модуля во время ее изменения с FormsAuthenticationModule на FormsAuthentication .

Набор рабочих модhive в IIS 7.5 до 8.5 выглядит так для меня:

              

Приложение:

Как отметил @eych, это также блокирует доступ к папке ~/Content (или везде, где у вас есть CSS), и ~/Scripts и т. Д.

Если вы хотите разрешить исключения – то есть разрешить доступ к определенным файлам / папкам для пользователей, не прошедших проверку подлинности, вы можете сделать это с помощью элемента location . Добавьте в web.config следующее:

         

Обновление. Лучшее решение состоит в том, чтобы оставить доступ по умолчанию – что позволит вам получить доступ к вашему CSS / JavaScript / и т. Д. – и применить «блокировку» (только) к папке, в которой хранится статическое содержимое:

        

Предостережение: в нашем случае (сайт MVC) нам необходимо было украсить все наши действия с controllerом (кроме входа в систему) с помощью [AuthorizeAttribute] . В любом случае это хорошая идея, но ранее она не была необходима (поскольку ранее любой несанкционированный запрос был перенаправлен на страницу входа в систему).

Если пул приложений работает в classическом режиме, вы можете сделать следующее. Вам нужно будет повторить эти шаги для каждого расширения файла, которое вы хотите обработать, но я использую здесь .html .

Сначала добавьте поставщика веб-страниц в Web.config:

           

Затем добавьте фабрику обработчика страниц:

         

Затем добавьте обработчик страницы:

          

Это сработало для меня. (Кредит: http://www.ifinity.com.au/Blog/EntryId/66/How-To-301-Redirect-htm-or-html-pages-to-DotNetNuke-aspx-pages .)

  • Возможно ли создать систему входа в систему с ASP.NET MVC, но не использовать MemberhipProvider?
  • Лучшая практика аутентификации на основе токенов REST с JAX-RS и Джерси
  • Попытка SSH в экземпляр Amazon Ec2 - ошибка разрешения
  • Идентификационные данные пользователя MVC 5 Access Identity
  • Подтвердить подпись Authenticode на EXE-C ++ без CAPICOM
  • Вставить фид активности общедоступной страницы Facebook, не заставляя пользователя входить в систему / разрешать
  • Добавить Keypair в существующий экземпляр EC2
  • Конечные точки Google и аутентификация пользователя
  • Omniauth: обратный вызов не срабатывает, возвращает отказ с «недопустимыми учетными данными»
  • Базовая проверка подлинности HTTP в Node.JS?
  • Аутентификация на основе токена REST API
  • Давайте будем гением компьютера.