◆郭建明
(甘肅機電職業技術學院 甘肅 741001)
利用Membership API 編程實現asp.net網站安全管理探析
◆郭建明
(甘肅機電職業技術學院 甘肅 741001)
在信息化高度發達的今天,網絡安全無疑是人們最為關心的問題,怎么樣有效的保障好數據安全是信息化發展最為核心問題。在用VS2010開發asp.net網站程序時,可以用系統自帶的登錄控件及“asp.net網站管理工具”來實現網站程序的安全管理,此方法簡單,但在網站發布及靈活性方面存在儲多不便,本文主要探討如何通過Membership API編程方式實現asp.net網站的安全管理。
Membership API;安全管理;角色權限;訪問規則
ASP.NET應用程序是一種開放式的B/S架構應用程序,但這種開放式的訪問方式無疑會給程序的安全運行帶來一定的隱患。在用VS2010開發asp.net網站程序時,可以用系統自帶的登錄控件及“asp.net網站管理工具”來實現網站程序的安全管理,此方法簡單,但在網站發布及靈活性方面存在諸多不便,以及在一些復雜的應用環境中,仍然需要通過編寫程序來實現特定的網站安全管理。如何以更加有效、靈活的方式實現網站安全管理,是創建B/S應用程序時必須要認真考慮的一個重要問題。
與傳統的C/S架構應用程序不同,ASP.NET應用程序由一系列單獨的網頁組成,如果沒有必要的安全設置,任何一個用戶都可以直接通過網頁的URL訪問頁面,則安全無從談起。
在傳統的asp及asp.net用戶身份認證中,一般采用Session對象保存用戶登錄狀態和用戶角色等信息[1]。當用戶訪問除了登錄頁面之外的其它頁面時,程序首先檢測Session對象中保存的數據,如果Session中保存的數據不正確,則跳回登錄頁面,如果正確,則從Session中讀取用戶狀態及角色信息,根據不同角色返回不同的頁面或同一頁面中不同的內容。
在一些要求不太嚴格的ASP程序中,也有通過查詢字符串或通過Cookie存儲用戶身份認證通過的,但這是及不安全的做法,在這兩種處理方式中用戶都有可能篡改驗證數據,偽造已通過認證的假象。
從ASP.NET2.0開始出現了基于角色的安全管理技術,并提供了7個用于身份識別的控件和一個網站管理工具。使于基于角色的安全管理技術,能及大地提高開發效率,提升網站安全級別?;诮巧陌踩芾砑夹g主要包括以下兩個方面的內容:
(1)用戶身份認證:主要包括新用戶注冊、用戶登錄、修改密碼、顯示狀態和其它信息等。這些操作基本上都可以通過工具箱“登錄”選項卡中的7個控件來完成。
(2)用戶權限管理:主要包括為用戶分配角色和為角色分配可訪問的資源等。
使用基于角色的安全管理技術,重點在于開發人員在規劃創建ASP.NET站點時,需要根據資源的級別不同使用樹形目錄的方式進行組織。需要在根站點下設置若干子目錄,將安全等級不同的文件存放在不同的子目錄中,然后為每個子目錄添加一個w eb.config文件,利用該文件配置本目錄的安全規則。
在vs2010中默認的方法是通過“ASP.NET網站管理工具”及登錄控件配合來完成添加用戶、添加角色、編輯訪問規則等信息。同時系統會自動在App_Data目錄下創建一個名為aspnetdb.mdf的數據庫文件,此數據庫是系統自動創建,專門用于存儲用戶、角色等信息,我們可以通過“ASP.NET網站管理工具”對其進行維護。
但是,系統默認創建的aspnetdb.mdf數據庫為SQLEXPRES S版,存儲在站點的App_Data目錄,數據庫連接名為LocalSqlS erver,這給我們站點的發布及數據的遷移帶來一些新問題,再者在一些復雜的應用環境中,必須通過編寫程序來實現特定的網站安全管理。下文主要探討如何通過Membership API編程的方式實現用戶、角色的安全管理。
Membership API是Membership類中公有方法的集合,使用Members API能夠實現用戶、角色的常規管理,如創建用戶、刪除用戶、創建角色等。在vs2010中可以通過Login登錄控件能實現的功能,通過Members API都能以編程的方式實現,而且更加靈活強大。想通過Membership API編程的方式實現用戶、角色的常規管理,需要從以下幾個方面理解:
3.1 命名空間的引用
Membership類包含于System.Web.Security命名空間,使用其方法前應使用using命令在應用程序中引用該命名空間,即
Using System.Web.Security;
3.2 將安全數據庫(AspNet.mdf)信息導入系統數據庫
系統默認下安全數據庫與系統數據庫是分開的,為方便后續數據庫的管理及遷移,應將安全數據庫信息導入系統數據中。
為完成安全數據導入,需要運行Asp.net SQL Server注冊工具(aspnetregsql.exe),并通過向導完成相應的導入操作。該工具為一個單獨的工具程序,默認存放在C:WindowsMicrosoft.NE TFrameworkv4.0.30319中(注,VS版本不同,存放位置也不同),找到aspnet_regsql.exe文件并雙擊打開,啟動ASP.NET SQL Ser ver安裝向導,在歡迎對話框中直接單擊“下一步”按鈕,打開如下圖1所示的“選擇服務器的數據庫”對話框,輸入SQL Server服務的計算機名稱或IP地址,填寫對數據庫有管理權限的用戶名和密碼,并在下拉列表中選擇你的系統數據庫名稱(如本例假定為ABC),如下圖1所示。

圖1 ASP.NET SQL Server安裝向導配置
然后單擊“下一步”按鈕,在打開的確認對話框中核對前面輸入和選擇的項目后單擊“下一步”按鈕,在最后出現的完成對話框中單擊“完成”按鈕,結束安全信息數據庫的導入操作。操作完成后,在數據庫管理界面中可以看到如圖2所示的相關安全數據表。

圖2 相關安全數據表
3.3 在web.config中配置Membership類
在web.config中的Membership類的相關配置尤為關鍵,在<connectionStrings>節中添加數據庫連接,具體如下:

然后在system.web節中配置如下代碼:


通過以上幾個步驟的配置,就完成了安全數據庫與網站數據庫合并,修改了vs2010默認安全連接,接下來通過編程的方式實現網站安全管理。
4.1 編程方式添加用戶的具體代碼實現
在網站中添加一個Web窗體,在Web窗體中添加一個按鈕,雙擊按鈕進入窗體后臺代碼編輯界面,首先引入命名空間:
using System.Web.Security;
編寫獲取錯誤提示信息的方法GetErrorMessage()。


在窗體中設計如下圖3所示創建用戶界面,所用控件均為系統自帶文本框控件,并按次序分別命名為Username、Password、Email、Questions、Answer。

圖3 創建用戶界面
在按鈕的單擊事件中添加如下代碼:
MembershipCreateStatus status;
Membership.CreateUser(Username.Text,Password.Text,E mail.Text,Question.Text,
Answer.Text,false,out status);
Response.Write(GetErrorMessage(status));
運行窗體,然后在創建用戶表單中輸入相應的值,單擊“創建用戶”按鈕,則該安全用戶編程創建成功。
4.2 編程方式完成角色管理的代碼實現
角色管理是指創建、刪除、查詢、分配角色的操作。這些操作可以通過Roles類中提供的一系列方法來完成。所有操作均基于引用了System.Web.Security命名空間,且必須建立在完成了第3節所有配置的基礎之上。
(1)創建新角色
創建一個新角色可以使用Roles類的CreateRole()方法來實現,其語法格式為:
Roles.CreateRole(RoleName);
其中,RoleName參數表示希望創建的新角色名稱。例:
Roles.CreateRole(”admin”);
則創建了一個名為admin的角色。
(2)為用戶分配角色
為數據庫中現有用戶分配角色可以使用Roles類的AddUser ToRole()方法來實現,例:
Roles.AddUserToRole(“郭某某”,”admin”);
意為將用戶郭某某添加到admin角色中。
依此做法,都將能以編程的方式完成用戶、角色的添加、刪除、查詢、更新等一系列操作,限于篇幅,此處再不贅述。
所謂“網站訪問規則”是指為網站中不同的文件夾分配可以訪問的用戶或角色。為網站創建訪問規則可以有兩種方法:
5.1 用“asp.net網站管理工具”創建
可以借助“asp.net網站管理工具”可視化界面操作完成對每個文件夾的安全配置,如圖4所示。

圖4 文件夾的安全配置
注意,此時在“asp.net網站管理工具”中所做的所有操作,都將保存在系統數據庫即我們指定的數據庫中。
每個目錄的訪問規則可以由若干條組成,但執行的順序為自上而下,當某一條目被匹配后后續的條目不再處理,所以設置規則時條目的排列十分重要。
5.2 直接手動配置每個目錄的web.config文件
Web.config是一個XML文件,我們隨時都可以通過記事本編輯此文件,完成對網站目錄的安全配置。例,手動配置網站a dmin目錄下的web.config文件,配置內容如下:

<allow roles="超級管理員" />意思為此admin目錄超級管理員可以訪問,<deny roles="普通用戶" />普通用戶不能訪問。
理解了上述語法含義,程序員就可以輕松的使用記錄事本編輯web.config文件,達到修改或創建網站訪問規則的目的。
本文所探討內容在win7+vs2010下均測試通過。
總之,實現網站安全管理的手段有很多,但通過Members API以編程的方式實現,將使網站安全管理更加靈活、強大,同時在數據遷移及網站發布方面將帶來意想不到的便利。
[1]崔森,關六三,彭煒.ASP.NET程序設計(C#版)[M].北京:機械工業出版社,2013.