asp.net — запретить загрузку определенного файла

#asp.net #security

#asp.net #Безопасность

Вопрос:

У меня есть веб-сайт, где у меня также есть каталог «UserFiles», который защищен для просмотра его содержимого в браузере:

Этот виртуальный каталог не позволяет отображать содержимое в списке.

Проблема в том, что у меня здесь есть несколько файлов, которые, если вы знаете имя файла, например:

http://example.com/UserFiles/file.ppt

вы можете скачать его.

Есть ли какой-либо способ защитить это также от web.config? Или, если пользователь пытается получить к этому доступ, сделать перенаправление на страницу входа в систему?

Пожалуйста, обратите внимание, что я не использую проверку подлинности в формах, но включен пользовательский логин и проверка подлинности Windows.

Спасибо,

ОБНОВЛЕНИЕ: я попробую это на данный момент: http://www.dotnetcurry.com/ShowArticle.aspx?ID=270

Ответ №1:

Если вы все еще хотите сделать это через web.config , ваш web.config файл должен иметь это в httpHandlers разделе:

 <system.web>
    <httpHandlers>
        <add verb="*" path="*.ppt" type="System.Web.HttpForbiddenHandler" />
    </httpHandlers>
</system.web>
  

Это заблокирует все файлы .ppt.

Комментарии:

1. Интересно, сработает ли это, если в качестве пути указан каталог?

Ответ №2:

Когда кому-то нужно загрузить один из этих файлов, вы просто перенаправляете их на URL, аналогичный тому, который вы там указали?

Альтернативой может быть определение страницы, которая возвращает файл, в который вы затем можете поместить любые проверки разрешений, которые вы хотите. Использование этого метода также позволяет полностью переместить эту пользовательскую папку за пределы веб-папки, поэтому эти URL-адреса вообще недоступны.

например:

 C:UserFiles
C:inetpubMyWebFolder
  

Вам просто нужно убедиться, что учетная запись пользователя, под которой запущено веб-приложение, имеет соответствующие разрешения на C:UserFiles папка.

Комментарии:

1. Привет, Крис, спасибо за ответ. К сожалению, перемещение папки потребует большого рефакторинга в коде, поэтому я пытаюсь найти альтернативу… И да, я предоставляю простые URL-адреса зарегистрированным пользователям…

2. В этом случае опция IHttpHandler, которую вы пытаетесь использовать, является единственным другим вариантом, который я могу придумать.