編輯web.config保證ASP.NET的安全

字號:

所有.NET的應(yīng)用程序都將其信息保存在一個基于XML的配置文件里。一般來說,這個.config配置文件位于應(yīng)用程序可執(zhí)行文件的目錄下。但是,Web應(yīng)用程序會使用位于應(yīng)用程序根目錄下的web.config文件。用于ASP.NET應(yīng)用程序的web.config包含的信息和其應(yīng)用程序大多數(shù)的操作都相關(guān)?,F(xiàn)在讓我們剖析一個web.config示例文件,看看你會在其中找到哪些和安全相關(guān)的設(shè)置。
    配置文件的設(shè)置和區(qū)段
    首先,我們看一下Listing A里的配置文件的整體結(jié)構(gòu)。這個文件作為XML文檔必須有一個根元素把其他所有的元素都包括進(jìn)來。很奇怪的是,在這里根元素是。在根元素之下是和區(qū)段。這一區(qū)段會辨別它所包括的用于缺省Web服務(wù)器的信息,包括安全信息。這一區(qū)段放置著用于你應(yīng)用程序的所有全局?jǐn)?shù)據(jù)。我已經(jīng)說過,數(shù)據(jù)庫連接字符串能夠被很好地保存下來。在我的例子里,我在那里保存了Web網(wǎng)站無DSN的ODBC連接字符串。
    自定義錯誤頁面
    下的第一項是,它能夠讓你指定一些頁面,以便在你的用戶碰到各種錯誤的時候?qū)⑺麄円龑?dǎo)到這些頁面。在我的例子里,如果發(fā)生404錯誤,用戶將被引導(dǎo)到/errorpages/FileNotFound.html頁面。碰到任何其他錯誤的時候,用戶會被引導(dǎo)到/errorpages/GeneralError.html頁面。
    驗證
    這一區(qū)段定義了服務(wù)器進(jìn)行用戶驗證這一過程的細(xì)節(jié)。所支持的三種不同模式是Windows、Forms和Passport?,F(xiàn)在我們來仔細(xì)看看每種模式:
    Windows驗證通過Windows的系統(tǒng)帳號來驗證用戶,例如活動目錄(Active Directory)。Windows驗證是最安全的驗證形式,對于程序員來說這種模式是很簡單的,因為整個過程都是由操作系統(tǒng)來處理的。但是,網(wǎng)站的每個用戶都需要一個系統(tǒng)帳號,所以這種模式會被限制在企業(yè)內(nèi)部網(wǎng)(intranet)的應(yīng)用程序里。
    Passport驗證使用護(hù)照來驗證用戶,它是第二安全的驗證方式。其的用武之地是大型的、活動的Internet電子商務(wù)應(yīng)用程序,這些程序會驗證用戶的服務(wù)使用費(fèi)。這種模式是.NET所選擇的驗證方法。
    Forms驗證是安全性最低的驗證方法,因為必須要由你的應(yīng)用程序自己來處理驗證過程。但是,這是最有可能在你Internet應(yīng)用程序上使用的模式,因為它所需要的管理和維護(hù)是最少的。
    查一下Listing A你就可以看到這個網(wǎng)站使用了Forms驗證。你可以指定一個自己希望的域名。在這里,我使用的是.ASPXAUTH,其功能和名稱其實(shí)是名不符實(shí)的。我只不過是把這個元素放進(jìn)去,用以提醒我它的確有個名字。
    你還會看到,我已經(jīng)為登錄頁面指定了相關(guān)的URL:/LoginForm.aspx。當(dāng)用戶試圖訪問一個安全頁面時,無法通過驗證的用戶就會被引導(dǎo)到這個URL。匿名用戶,如果你允許他們訪問你的授權(quán)區(qū)域的話,就不會被自動送到這個頁面。
    這一區(qū)段包含的設(shè)置會明確地允許()或者不允許()對一個用戶、一組用戶或者一類用戶的訪問。這些設(shè)置所能夠接受的值是:用于匿名用戶的問號(?)、用于所有用戶的星號(*),或者是使用逗號隔開的特定用戶名的列表。
    你可以指定由和兩者之一或者兩者同時來定義你網(wǎng)站的安全。在Listing A里,我指明除匿名用戶和四種麻煩制造者以外的所有人都被允許訪問,這四種人已經(jīng)帶來了夠多的麻煩,所以被禁止:黑客(Hacker)、駭客(Cracker)、fasherman和hillgirl。如果我把用于這些用戶屬性的和標(biāo)簽進(jìn)行交換的話,那么就只有匿名用戶和這四類用戶具有訪問權(quán)。其他任何沒有合法信任書的用戶都會被拒之門外。
    盡管你可以把用戶名保存在元素里,以此來維護(hù)你的用戶帳號,但是我不推薦這么做。如果你真的把用戶信息保存在web.config文件里,那么用戶驗證就只會在那個特定的Web服務(wù)器上進(jìn)行。在碰到大規(guī)模的Web服務(wù)器群或者負(fù)載均衡Web服務(wù)器的情況下,發(fā)生在一臺機(jī)器上的驗證也要發(fā)生在同一Web服務(wù)器群的其他所有服務(wù)器上。
    防止用戶在每個頁面都必須登陸的方法是把數(shù)據(jù)保存在一個通用的數(shù)據(jù)倉里,例如數(shù)據(jù)庫。不要把用戶的信任書保存在web.config文件里的另一個原因是,服務(wù)器必須重啟,以重新加載新的信任書。這一問題應(yīng)該會在未來的操作系統(tǒng)里得到修正,但是對于運(yùn)行IIS5的Windows 2000服務(wù)器版來說,這是個已經(jīng)具有的問題。
    諸多優(yōu)點(diǎn)
    你現(xiàn)在已經(jīng)看到了如何使用XML文件里的元素,IIS需要這些元素來管理ASP.NET Web應(yīng)用程序的元素。這個配置模型具有諸多你已經(jīng)體會到了的優(yōu)點(diǎn)。由于IIS通過監(jiān)視web.config文件來進(jìn)行更改,所以配置文件的任何變動都會立即體現(xiàn)出來:這樣就不需要服務(wù)器的重啟。