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