Как запретить пользователю доступ к подпапкам и файлу?

на локальной машине, я создал образец проекта на mvc4 (бритву) и создаю каталог с именем "x" и поместил в него текстовый файл "a.txt".

http://localhost:64471/x/a.txt

в моей веб-конфигурации я запрещаю всем пользователям доступ к папке "x" в этой конфигурации:

<location path="x">
<system.web>
  <authorization>
    <deny users="*"/>
  </authorization>
</system.web>

Теперь, если пользователь отправит этот запрос:

http://localhost:64471/x/ 

он работает и возвращает пользователя к URL-адресу, указанному в теге forms в веб-конфигурации.

но когда пользователь отправляет этот запрос:

http://localhost:64471/x/a.txt

может читать текстовый файл в браузере (браузер показывает содержимое текстового файла).

Я хочу знать, как запретить пользователю доступ ко всем файлам и подпапкам в папке "x" ?

Ответы

Ответ 1

Я тестировал с path="x" в корневом web.config. Он ограничивает все в папке x; он даже не позволит мне просматривать ~/x. Я перенаправляюсь на страницу входа.

Не могли бы вы попробовать полный путь к a.txt, как в корневой web.config?

<location path="x/a.txt">
  <system.web>
    <authorization>
      <deny users="*"/>
    </authorization>
  </system.web>
</location>

Если он по-прежнему не работает, вы можете попробовать создать файл web.config внутри x со следующим содержимым.

<?xml version="1.0"?>
<configuration>

  <location path="a.txt">
    <system.web>
      <authorization>
        <deny users="*"/>
      </authorization>
    </system.web>
  </location>

</configuration>

Ответ 2

Я знаю, что это старый вопрос, но если у вас возникли проблемы и работа с текстовыми или html файлами, вы можете обратиться к fooobar.com/info/352721/...

Короче говоря, вам может потребоваться добавить это в ваш web.config:

<system.webServer>
    <modules>
        <remove name="UrlAuthorization" />
        <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule"  />
    </modules>
</system.webServer>

Как указывает kirk, файлы, такие как .txt и .html файлы, обрабатываются IIS, а не ASP.NET, поэтому правила авторизации не применяется к ним.