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

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

Я знаю, что 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>

Но я все еще могу получить прямой доступ к файлу внутри каталога. Что с этим не так? Как мне отладить то, что происходит?

Вы используете 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>

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

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

Вы можете использовать узлы Location в 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>

Вы также можете использовать? подстановочный знак, чтобы указать, что вы должны (разрешить / запретить) анонимных пользователей

  • * означает каждого вошедшего в систему пользователя.
  • ? означает анонимных пользователей.

Вы должны использовать ?.

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