如何在asp.net保護文件

如何在asp.net保護文件
 
簡介
如果我們做網站是用Access數據庫作爲數據源,則我們最關心的是Access數據庫文件的安全問題。如果我們將存有重要信息(如密碼、付款信息、個人私有的數據等等)的.mdb文件,放在Web服務器上可訪問的目錄中,任何一個人若猜到數據庫文件名就可以通過瀏覽器或其他下載工具進行下載,這是非常危險的。
 
有許多方法對.mdb數據庫文件進行保護,甚至任何一個你想保護的文件。最直接有效的方法是把.mdb數據庫文件放在web服務器non-web accessible目錄中。許多web服務器中,都提供一個特殊的可讀寫的database目錄,但它是不準以網頁形式進行訪問的。
 
理解IIS和asp.net如何工作
當訪問一個從IIS服務器請求時,IIS ISAPI(Internet server application programming interface ,英特網服務器應用編程接口)會對被訪問文件的擴展名進行檢查,其訪問的文件類型是否被web服務器解析器屏蔽。
 
Web服務器默認時,IIS對於簡單的請求會返回其文件包含的內容。它會解析出所認知的存在的文件,如圖片、html頁面、CSS文件、擴展的Javascript文件等,例如,當訪問一個html文件時,IIS返回它所包含的內容信息。
 
對於內容是動態生成的文件,ISAPI對請求的文件進行動態生成內容。比如,一個用asp語言做的網站,其.asp的文件會映射到擴展了的asp.dll英特網服務器應用編程接口中進行解析。擴展了的Asp.dll英特網服務器應用編程接口自動解析web服務器請求的asp頁並返回生成的html文件內容。如果你的網站是使用asp.net語言寫的,IIS則會把.aspx文件映射給擴展了的aspnet_isapi.dll英特網服務器應用編程接口,當aspnet_isapi.dll接受到.aspx文件的請求時,擴展了的aspnet_isapi.dll英特網服務器應用編程接口在進程中自動生成爲html文件的內容。
 
擴展了的aspnet_isapi.dll英特網服務器應用編程接口是一個非託管的代碼。它不能在.net Framwork中運行。當IIS發送請求到擴展的英特網服務器應用編程接口,即aspnet_isapi.dll在asp.net引擎上轉發它的請求並通過.Net Framwork託管代碼進行解析 。
 
ASP.NET引擎非常接近於IIS,就好像IIS有一個目錄將指定的文件類型映射到ISAPI上,但ASP.NET引擎將文件類型映射到HTTP Handlers。一個HTTP Handler 是一個爲特定文件類型自動生成的託管代碼。例如,ASP.NET是用PageHandlerFactory生成的;網絡服務的SOAP響應是用WebServiceFactoryHandler生成的。PageHandlerFactory 知道如何將一個ASP.NET網頁解析爲HTML文件;WebServiceFactoryHandler 知道如何將接收到的SOAP響應爲其調用正確的網絡服務的方法並返回正確格式的SOAP響應。
 
測試HttpForbiddenHandler
ASP.NET網絡應用程序是通過XML格式文件進行配置的,即Web.config文件。此文件包含的主要信息有:
     據庫連接字符串
     認證用戶的信息,可包括用戶名和蜜碼
     其他相關的緩存、編碼等配置信息
 
花點時間,你試着訪問一個ASP.NET網絡應用程序的Web.config文件,結果如何?很明顯,允許所有網絡訪問者看到ASP.NET網絡應用程序的Web.config文件的內容是很危險的,所以,ASP.NET 網絡應用程序已配置aspnet_isapi.dll將.mdb文件類型過濾掉。
 
如何在訪問Web.config文件時阻止呢?在IIS中,.config文件映射到ASP.NET ISAPI上,那麼ASP.NET引擎會把請求的.config文件映射到HttpforbiddenHandler HTTP handler,接着HttpForbiddenHandler HTTP handler 通過網頁瀏覽器以HTML的格式返回給用戶。
 
現在我們來看如何在ASP.NET中使用HttpForbiddenHandler HTTP handler 來保護.config文件,我們也可以參照此技術來保護.cs、.vb、.webinfo、.vbproj、.csproj、.resx等其他文件類型。同樣地,我們用此技術來保護Access數據庫文件(.mdb文件)或是任何一個文件類型。在下面章節中,我們將看到保護指定文件類型的必要步驟。
 
保護.mdb文件
爲了達到保護.mdb數據庫文件類型和.config文件類型,我們必須設置以下兩個步驟:
1.     配置IIS,將.mdb文件類型映射到ASP.NET ISAPI
2.     配置ASP.NET,將.mdb文件類型映射到HttpForbiddenHandler HTTP handler
 
你必須在網頁服務器上在IIS中,將.mdb文件類型映射到aspnet_isapi.dll ISAPI上。登錄到網頁服務器,通過[開始]—>[管理工具]—>[Internet 服務管理器],下一步,在某一個網站上右擊,會出現彈出式菜單,接着選擇[屬性]彈出此站點的屬性對話框,點擊[主目錄]選項卡,點擊[配置]按鈕,則會顯示[應用程序配置]對話框,如下所示
Windows NT/2000/XP
Windows 2003
點擊[添加]增加一個映射,這時會顯示一個對話框,要你輸入ISAPI的文件名,此文件名可以是.exe或是.dll文件,它會阻止用戶請求時的特殊文件類型(你也可以阻止其文件類型的所有HTTP請求(GET和POST)或是特定的HTTP動作)
那麼,輸入*.mdb回車,選擇可執行的文件爲ISAPI爲aspnet_isapi.dll(此文件可以在當前$WINDOWS_DIR$/Microsoft.Net/Framework/$VERSION$中找到)。
 
現在我們已配好.mdb過濾器,我們還要做最後一步:使網絡應用程序.mdb文件類型映射到HttpForbiddenHandler HTTP 句柄。爲了達到這上步,我們必須將下面的配置加到Web.config文件中:
<httpHandlers>
   <add verb="*" path="*.mdb" type="System.Web.HttpForbiddenHandler" />
</httpHandlers>
必須將此段代碼放在<system.web>這一節中,當前的網絡應用程序在訪問該程序使用的.mdb時,就會阻止訪問。
如果你想將所有的網絡應用程序都無法訪問*.mdb文件類型,將<add verb="*" path="*.mdb" type="System.Web.HttpForbiddenHandler" /> 加入到machine.config文件的<httpHandlers>節中。(machine.config可在$WINDOWS_DIR$/Microsoft.Net/Framework/$VERSION$/CONFIG 目錄中找到) 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章