asp.net2.0安全性(驗證與授權)

asp.net2.0安全性(驗證與授權)

"驗證"與"授權"是對網頁資源安全管理的兩道門。

驗證(Authentication):檢查用戶是否是合法的用戶。就像是網站大門口的保衛,服責驗證使用的用戶名和密碼。

授權(Authorization):檢查用戶是否有訪問某種資源的許可權。例如有的人雖然能過了環保局門口保衛的驗證,進入環保局,但他可能是一個普通科員,那他就沒有局長職責。

驗證與授權的底層運作:

首先,打開windows操作系統的「管理工具」->「計算機管理」->「本地用戶和組」->「用戶」。會看到右側的窗口中列出了好多的計算機用戶,但細心的朋友會發現,你安裝完IIS後會多出一個用戶「IUSR_***」,這個用戶是做什麼用的呢?答案是:它是Windows IIS匿名者所使用的授權賬號。而「IUSR-***」中的「***」就是您的計算機名。

然後,你再在c:/inetpub/wwwroot(IIS默認的文件夾)文件夾上右擊,選擇「屬性」(NTFS格式),在「組和用戶名稱」列表中你會看到當前文件夾授權給了「IUSR_***」這個Internet來賓帳戶了。這個授權是必須,不要刪掉。

最後,在「Internet信息服務管理器(IIS)」中右擊「默認站點」,選擇「目錄安全性」->「身份驗證和訪問控制」->「編輯」打開「身份驗證對話框」,在「用戶名」的文本框中會看到「IUSR_***」這個用戶名。

現大家明白了,客戶機通過網路來訪問你的網站的時候,是借用了「IUSR_***」這個用戶來訪問你的網站的。而「IUSR_***」這個用戶的許可權控制是受「NTFS」的ACL進行設置的。所以IIS的身份驗證的底層運作的主要控管者是由「NTFS」許可權管理系統來實現的。

身份驗證:

Asp.net2.0中提供的身份驗證模式有三種:

1)Windows身份驗證:通過windows的ACL和IIS配合進行驗證的。網站本身沒有帳戶管理功能,全部委託Windows的安全機制來實現。管理員必須為每一個訪問網站的用戶分配一個伺服器Windows上的賬戶。這樣問題就來了,在Internet環境下你很難讓管理員為每一個用戶分配一個賬號,所以這種驗證方式不適用於Internet環境,只適於公司內部的受控環境中。所以在這裡我就略去不說了。

2)Forms身份驗證:通過自己的帳戶管理系統和IIS配合進行驗證,並把驗證的身份保存在Cookies中。這種方式適合於Internet環境。

3)Passport身份驗證:此驗證方式是通過微軟提供的Passport服務進行驗證,當然,你需要給微軟交不菲的$了。這種驗證方式我也就略去不說了。

設置你的網站的驗證模式:

1)依次打開「Internet信息服務管理器(IIS)」-「默認站點」-「屬性」-「ASP.NET」-「身份驗證」。在「身份驗證設置」中的下拉列表中選擇你要實現的身份驗證方式(這裡我們選擇Forms)。

2)將站點開啟IIS匿名訪問。

3)創建登錄頁面(用戶名和密碼兩個文本框和一個登錄按鈕)

4)編寫「登錄」按鈕的代碼,驗證用戶名和密碼

5)設置網站登錄程序

<authentication mode="Forms">

<forms loginUrl="Users.aspx" name="auth" protection="All" timeout="60" path="/" />

</authentication>

<forms>元素的屬性介紹:

name:將來保存Cookie的名稱。

loginUrl:網站的登錄首面,當未通過身份驗證去訪問網站某頁面時就會被自動轉回所指定的頁面(Users.aspx)。

protection:Cookie的保存模式,All代表保存時加密,傳輸中驗證。

path:Cookie的保存路徑。若path=」/」 Cookie保存為administrator@localhost[1].txt,若path=」mygod」 Cookie保存為administrator@mygod[1].txt

timeout:Cookie的有效期。單位是分鐘

FormsAuthentication類:

RedirectFromLoginPage(string,bool):驗證通過後網頁轉向用戶要訪問的網頁去。

RedirectToLoginPage():將網頁轉向指定登錄頁面。

SignOut():移除用戶身份驗證的信息。

Authenticate(string ,string):對照配置文件中的驗證憑據進行驗證。返回bool型數據,代表用戶是否登錄成功。

SetAuthCookie(string,bool):為用戶產生一個用戶驗證票據,並將用戶資料記錄Cookie。

HashPasswordForStoringInConfigFile(string ,passwordformat):將字元串按照指定的加密方式進行單向加密,返回加密後的字元串。

授權:

Asp.net2.0中的授權分兩種:文件授權和URL授權。

文件授權:實際上是通過ACL來進行設置來訪用戶對網頁的訪問許可權。這種方法對程序開發人員來說太笨拙。這裡不多說了。

URL授權:將用戶和角色對應至資料庫中用戶與角色,選擇性地允許與拒絕特定用戶或角色。

URL授權是由UrlAuthorizationModule來執行的。作為開發者只需要對Web.Config文件進行相關配置就可以了。如:

</system.web>

<authorization>

<deny users="bbb"></deny>

<deny roles="admin"></deny>

</authorization>

</system.web>

這樣就可以拒絕bbb用戶和所有的角色是admin的用戶。

-匿名用戶

*-所有用戶

需要說明的一點是,asp.net是按照文件夾進行授權的。要對不同的網頁進行不同的授權的話,那你可以把文件分散到不同的文件夾中去,然後在不同的文件夾中建立不同的web.config文件,對該文件夾下的頁面進行不同的授權。

推薦閱讀:

劫案接連不斷 社會安全離法國華人還有多遠?
防闖紅燈現新「神器」,闖燈者被噴水霧
亞太安全結構的演變及其對中國的影響 ■ 王洪濤/文
2013年食品安全熱點事件
波音787安全嗎?該如何選座位?

TAG:安全 | 安全性 | 授權 | 驗證 |