2009-11-25 37 views
2

語境:IIS 6忽略Web.config中的授權設置

  • 在Windows 2003服務器
  • ASP.NET 3.5 SP1 IIS 6
  • 從虛擬目錄中運行
  • C#Web應用程序

有幾個我不想提供的文件。例如,根目錄中有一個不可訪問的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> 

OR

<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. 虛擬目錄>配置
  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 =「*」'本來應該處理該情況。 – 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(或其他文件類型)爲在web.config中上述(IIS6網站屬性,主目錄,配置)

2)中描述的IIS添加位置的用於受限目錄或文件

<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僅將<location>標記中指定的.xml文件提供給經過身份驗證的用戶。