2009-11-25 3 views
2

Контекст:IIS 6 игнорирует параметры авторизации Web.config

  • IIS 6 на Windows 2003 Server
  • ASP.NET 3.5 sp1
  • C# веб-приложение работает с виртуального каталога

Есть несколько файлов, которые я бы хотел не обслуживать. Например, в корневом каталоге есть hibernate.cfg.xml, который не должен быть доступен. Существуют также файлы журналов в каталоге журналов. На локальном сервере разработки (Visual Studio 2008) Файл конфигурации NHibernate может быть защищена несколькими способами через Web.config:

<location path="hibernate.cfg.xml"> 
    <system.web> 
     <authorization> 
     <deny users="?"/> 
     <deny users="*"/> 
     </authorization> 
    </system.web> 
</location> 

ИЛИ

<httpHandlers> 
... 
    <add path="*.cfg.xml" verb="*" type="System.Web.HttpForbiddenHandler" /> 
</httpHandlers> 

журналы в другой каталог может быть защищенный через другой файл Web.config:

<?xml version="1.0"?> 
<configuration> 
    <system.web> 
    <authorization> 
     <deny users="*"/> 
    </authorization> 
    </system.web> 
</configuration> 

Ни одна из этих работ при компиляции приложения с использованием aspnet_compiler.exe и развертывается на сервере IIS 6. Ошибок в журналах нет. Файлы читабельны для всех. Приложение компилируется и устанавливается с помощью MSBuild следующим образом:

<AspNetCompiler Force="true" Debug="true" PhysicalPath="$(DeploymentTempPath)\$(DeploymentAppName)" TargetPath="$(DeploymentPath)\$(DeploymentAppName)" VirtualPath="/$(DeploymentAppName)" /> 

Как сделать IIS 6 соблюдать правила авторизации в Web.config.

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

ответ

6

Похоже, что IIS не перенаправляет запрос на .xml или .txt-файлы на ASP.NET, поэтому у него нет возможности применить свои средства управления авторизацией.

Чтобы обойти эту проблему, я должен был сделать следующее (из this forum post):

  1. Из консоли IIS, откройте свойства виртуального каталога моего приложения.
  2. Virtual Directory> Конфигурация
  3. Добавить новый обработчик для расширения «.xml» с помощью фильтра ASP.NET (c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll в моем случае)
  4. всех глаголов. Снимите флажок «Механизм сценария» и «Проверить, существует ли файл».

Есть ли способ сделать это изнутри Web.config?

2

Попробуйте это:

<location path="hibernate.cfg.xml"> 
    <system.web> 
     <authorization> 
     <deny users="?"/> 
     <deny users="*"/> 
     </authorization> 
    </system.web> 
</location> 
+0

+1 вы избили меня на 40 секунд –

+0

Спасибо за быстрый ответ, но, к сожалению, это не сработало. IIUC, 'deny users ="? "' Просто гарантирует, что анонимным пользователям не разрешен доступ к ресурсу. Но прежде, чем я применил это изменение, аутентифицированные пользователи могли получить доступ к файлу, даже через 'deny users =" * "' должен был позаботиться об этом случае. – tro

0

URL Авторизация: Класс URLAuthorizationModule является ответственность за разрешение URL на Windows 2003. Этот механизм использует пространство имен URL, чтобы сохранить пользовательские данные и роли доступа. Разрешение URL доступно для использования в в любое время. Вы храните авторизацию информацию в специальном файле XML в каталоге . Файл содержит теги до , разрешает или запрещает доступ к каталогу для определенных пользователей или групп. Если не указано значение , теги также применяются к подкаталогам .

Вам нужно сделать следующее: "?"

<deny users="?"/> 
<deny users="*"/> 

Дикой записью карты означает, что никто другой не сможет получить доступ к этому каталогу.

2

статические файлы, такие как .jpg, .xml и .pdf, по умолчанию обрабатываются непосредственно в режиме ядра http.sys драйвера. Если вы не привязали эти расширения к ASP.NET, они никогда не попадут в конвейер ASP.NET и, следовательно, механизм авторизации в ASP.NET.

1

Чтобы заставить статические файлы, такие как .xml для обработки .NET на .NET 2.0/3.5/4.0 и IIS6, выполните следующие действия:

1) Добавить Записи for.xml (или другой тип файла) для IIS, как описано выше (свойства IIS6 сайта, домашний каталог, конфигурация)

2) в web.config добавить место для ограниченного каталога или файла

<location path="directory_or_file_name"> 
    <system.web> 
     <authorization> 
     <deny users="?"/> 
     </authorization> 
    </system.web> 
</location> 

3) Добавьте следующий к HttpHandlers раздел:

<add path="*.xml" verb="*" type="System.Web.StaticFileHandler" validate="true" /> 

Это заставит .NET использовать только файлы .xml, указанные в теге <location>, для аутентифицированных пользователей.

Смежные вопросы