IIS7: Як заблокувати доступ з файлом web.config?


14

Я знаю, що IIS7 дозволяє мені мати конфігурацію для кожного каталогу з файлом xml web.config. У мене є каталог з деякими файлами конфігурації, які не хочуть бути доступними в Інтернеті. Місцевий файл web.config, що забороняє доступ до читання, було б приємним рішенням.

Яким має бути вміст файлу web.config, щоб заборонити веб-доступ до файлів?

Редагувати: я намагаюся розмістити файл у файлі web.config з цим вмістом у файлі:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
            <system.web>
                    <authorization>
                            <deny users="*" /> <!-- Denies all users -->
                    </authorization>
            </system.web>
</configuration>

Але я все ще можу отримати прямий доступ до файлу всередині каталогу. Що з цим не так? Як налагодити те, що відбувається?

Відповіді:


12

Ви використовуєте system.web. У IIS7 замість цього слід використовувати system.webServer. Це заблокує всі типи файлів, а не лише файли ASP.NET. Наприклад, ви можете захистити паролем jpg, gif, txt та всі типи файлів.

Це виглядатиме приблизно так:

  <system.webServer>
      <security>
          <authorization>
              <remove users="*" roles="" verbs="" />
              <add accessType="Allow" roles="Administrators" />
          </authorization>
      </security>
  </system.webServer>

І якщо ви хочете встановити його лише на 1 файл:

 <location path="dontlook.jpg">
     <system.webServer>
         <security>
             <authorization>
                 <remove users="*" roles="" verbs="" />
                 <add accessType="Allow" roles="Administrators" />
             </authorization>
         </security>
     </system.webServer>
 </location>

Через рік я зіткнувся зі своєю власною відповіддю і хотів додати додаткову записку. Ви повинні переконатися, що або форми, або авторизація Windows також увімкнено, інакше корисне лише правило видалення. Якщо ви ввімкнули автентифікацію Windows, вам буде запропоновано ввести свої облікові дані.
Скотт Форсайт - MVP

+1 Нарешті! Витративши 3 години на це! Дякую
hofnarwillie

5

Я думаю, що це може вирішити вашу проблему.
розмістіть цей web.config у каталозі, який містить цільовий каталог:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering>
    <hiddenSegments>
     <add segment="target directory name"/>
    </hiddenSegments>
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>

2
Чи можете ви це підтвердити, перш ніж надсилати це як відповідь.
Джеймс А Молер

Це працює для мене. Також зауважте, що ви можете розмістити ім'я файлу як сегмент.
Soenhay

4

Ви можете використовувати вузли розташування на веб-сайті Web.config. Ось детальне пояснення на msdn ; коротко:

<location path="Subdirectory">
    <system.web>
        <authorization>
            <deny users="*"/> <!-- Denies all users -->
        </authorization>
    </system.web>
</location>
<location path="Public_Directory">
    <system.web>
        <authorization>
            <allow users="*"/> <!-- Allows all users -->
        </authorization>
    </system.web>
</location>

Ви також можете використовувати? wildcard, щоб вказати, що вам слід (дозволити / заборонити) анонімних користувачів


Як цей файл заблокував би доступ до поточного каталогу, але дозволив до каталогу "css"? у ньому відсутній тег <configuration> навколо.
neves

Ваш дозвіл дозволяє лише автентифікованим користувачам. Якщо ви хочете неавторизованих користувачів, слід включити дозволити користувачів = "?" так само.
Nissan Fan

0
  • * означає кожного зареєстрованого користувача.
  • ? означає анонімних користувачів.

Ви повинні використовувати ?.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.web>
        <authorization>
            <deny users="?" /> 
        </authorization>
    </system.web>
</configuration>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.