◆郭建明
(甘肅機(jī)電職業(yè)技術(shù)學(xué)院 甘肅 741001)
利用Membership API 編程實現(xiàn)asp.net網(wǎng)站安全管理探析
◆郭建明
(甘肅機(jī)電職業(yè)技術(shù)學(xué)院 甘肅 741001)
在信息化高度發(fā)達(dá)的今天,網(wǎng)絡(luò)安全無疑是人們最為關(guān)心的問題,怎么樣有效的保障好數(shù)據(jù)安全是信息化發(fā)展最為核心問題。在用VS2010開發(fā)asp.net網(wǎng)站程序時,可以用系統(tǒng)自帶的登錄控件及“asp.net網(wǎng)站管理工具”來實現(xiàn)網(wǎng)站程序的安全管理,此方法簡單,但在網(wǎng)站發(fā)布及靈活性方面存在儲多不便,本文主要探討如何通過Membership API編程方式實現(xiàn)asp.net網(wǎng)站的安全管理。
Membership API;安全管理;角色權(quán)限;訪問規(guī)則
ASP.NET應(yīng)用程序是一種開放式的B/S架構(gòu)應(yīng)用程序,但這種開放式的訪問方式無疑會給程序的安全運行帶來一定的隱患。在用VS2010開發(fā)asp.net網(wǎng)站程序時,可以用系統(tǒng)自帶的登錄控件及“asp.net網(wǎng)站管理工具”來實現(xiàn)網(wǎng)站程序的安全管理,此方法簡單,但在網(wǎng)站發(fā)布及靈活性方面存在諸多不便,以及在一些復(fù)雜的應(yīng)用環(huán)境中,仍然需要通過編寫程序來實現(xiàn)特定的網(wǎng)站安全管理。如何以更加有效、靈活的方式實現(xiàn)網(wǎng)站安全管理,是創(chuàng)建B/S應(yīng)用程序時必須要認(rèn)真考慮的一個重要問題。
與傳統(tǒng)的C/S架構(gòu)應(yīng)用程序不同,ASP.NET應(yīng)用程序由一系列單獨的網(wǎng)頁組成,如果沒有必要的安全設(shè)置,任何一個用戶都可以直接通過網(wǎng)頁的URL訪問頁面,則安全無從談起。
在傳統(tǒng)的asp及asp.net用戶身份認(rèn)證中,一般采用Session對象保存用戶登錄狀態(tài)和用戶角色等信息[1]。當(dāng)用戶訪問除了登錄頁面之外的其它頁面時,程序首先檢測Session對象中保存的數(shù)據(jù),如果Session中保存的數(shù)據(jù)不正確,則跳回登錄頁面,如果正確,則從Session中讀取用戶狀態(tài)及角色信息,根據(jù)不同角色返回不同的頁面或同一頁面中不同的內(nèi)容。
在一些要求不太嚴(yán)格的ASP程序中,也有通過查詢字符串或通過Cookie存儲用戶身份認(rèn)證通過的,但這是及不安全的做法,在這兩種處理方式中用戶都有可能篡改驗證數(shù)據(jù),偽造已通過認(rèn)證的假象。
從ASP.NET2.0開始出現(xiàn)了基于角色的安全管理技術(shù),并提供了7個用于身份識別的控件和一個網(wǎng)站管理工具。使于基于角色的安全管理技術(shù),能及大地提高開發(fā)效率,提升網(wǎng)站安全級別。基于角色的安全管理技術(shù)主要包括以下兩個方面的內(nèi)容:
(1)用戶身份認(rèn)證:主要包括新用戶注冊、用戶登錄、修改密碼、顯示狀態(tài)和其它信息等。這些操作基本上都可以通過工具箱“登錄”選項卡中的7個控件來完成。
(2)用戶權(quán)限管理:主要包括為用戶分配角色和為角色分配可訪問的資源等。
使用基于角色的安全管理技術(shù),重點在于開發(fā)人員在規(guī)劃創(chuàng)建ASP.NET站點時,需要根據(jù)資源的級別不同使用樹形目錄的方式進(jìn)行組織。需要在根站點下設(shè)置若干子目錄,將安全等級不同的文件存放在不同的子目錄中,然后為每個子目錄添加一個w eb.config文件,利用該文件配置本目錄的安全規(guī)則。
在vs2010中默認(rèn)的方法是通過“ASP.NET網(wǎng)站管理工具”及登錄控件配合來完成添加用戶、添加角色、編輯訪問規(guī)則等信息。同時系統(tǒng)會自動在App_Data目錄下創(chuàng)建一個名為aspnetdb.mdf的數(shù)據(jù)庫文件,此數(shù)據(jù)庫是系統(tǒng)自動創(chuàng)建,專門用于存儲用戶、角色等信息,我們可以通過“ASP.NET網(wǎng)站管理工具”對其進(jìn)行維護(hù)。
但是,系統(tǒng)默認(rèn)創(chuàng)建的aspnetdb.mdf數(shù)據(jù)庫為SQLEXPRES S版,存儲在站點的App_Data目錄,數(shù)據(jù)庫連接名為LocalSqlS erver,這給我們站點的發(fā)布及數(shù)據(jù)的遷移帶來一些新問題,再者在一些復(fù)雜的應(yīng)用環(huán)境中,必須通過編寫程序來實現(xiàn)特定的網(wǎng)站安全管理。下文主要探討如何通過Membership API編程的方式實現(xiàn)用戶、角色的安全管理。
Membership API是Membership類中公有方法的集合,使用Members API能夠?qū)崿F(xiàn)用戶、角色的常規(guī)管理,如創(chuàng)建用戶、刪除用戶、創(chuàng)建角色等。在vs2010中可以通過Login登錄控件能實現(xiàn)的功能,通過Members API都能以編程的方式實現(xiàn),而且更加靈活強大。想通過Membership API編程的方式實現(xiàn)用戶、角色的常規(guī)管理,需要從以下幾個方面理解:
3.1 命名空間的引用
Membership類包含于System.Web.Security命名空間,使用其方法前應(yīng)使用using命令在應(yīng)用程序中引用該命名空間,即
Using System.Web.Security;
3.2 將安全數(shù)據(jù)庫(AspNet.mdf)信息導(dǎo)入系統(tǒng)數(shù)據(jù)庫
系統(tǒng)默認(rèn)下安全數(shù)據(jù)庫與系統(tǒng)數(shù)據(jù)庫是分開的,為方便后續(xù)數(shù)據(jù)庫的管理及遷移,應(yīng)將安全數(shù)據(jù)庫信息導(dǎo)入系統(tǒng)數(shù)據(jù)中。
為完成安全數(shù)據(jù)導(dǎo)入,需要運行Asp.net SQL Server注冊工具(aspnetregsql.exe),并通過向?qū)瓿上鄳?yīng)的導(dǎo)入操作。該工具為一個單獨的工具程序,默認(rèn)存放在C:WindowsMicrosoft.NE TFrameworkv4.0.30319中(注,VS版本不同,存放位置也不同),找到aspnet_regsql.exe文件并雙擊打開,啟動ASP.NET SQL Ser ver安裝向?qū)?,在歡迎對話框中直接單擊“下一步”按鈕,打開如下圖1所示的“選擇服務(wù)器的數(shù)據(jù)庫”對話框,輸入SQL Server服務(wù)的計算機(jī)名稱或IP地址,填寫對數(shù)據(jù)庫有管理權(quán)限的用戶名和密碼,并在下拉列表中選擇你的系統(tǒng)數(shù)據(jù)庫名稱(如本例假定為ABC),如下圖1所示。
圖1 ASP.NET SQL Server安裝向?qū)渲?/p>
然后單擊“下一步”按鈕,在打開的確認(rèn)對話框中核對前面輸入和選擇的項目后單擊“下一步”按鈕,在最后出現(xiàn)的完成對話框中單擊“完成”按鈕,結(jié)束安全信息數(shù)據(jù)庫的導(dǎo)入操作。操作完成后,在數(shù)據(jù)庫管理界面中可以看到如圖2所示的相關(guān)安全數(shù)據(jù)表。
圖2 相關(guān)安全數(shù)據(jù)表
3.3 在web.config中配置Membership類
在web.config中的Membership類的相關(guān)配置尤為關(guān)鍵,在<connectionStrings>節(jié)中添加數(shù)據(jù)庫連接,具體如下:
然后在system.web節(jié)中配置如下代碼:
通過以上幾個步驟的配置,就完成了安全數(shù)據(jù)庫與網(wǎng)站數(shù)據(jù)庫合并,修改了vs2010默認(rèn)安全連接,接下來通過編程的方式實現(xiàn)網(wǎng)站安全管理。
4.1 編程方式添加用戶的具體代碼實現(xiàn)
在網(wǎng)站中添加一個Web窗體,在Web窗體中添加一個按鈕,雙擊按鈕進(jìn)入窗體后臺代碼編輯界面,首先引入命名空間:
using System.Web.Security;
編寫獲取錯誤提示信息的方法GetErrorMessage()。
在窗體中設(shè)計如下圖3所示創(chuàng)建用戶界面,所用控件均為系統(tǒng)自帶文本框控件,并按次序分別命名為Username、Password、Email、Questions、Answer。
圖3 創(chuàng)建用戶界面
在按鈕的單擊事件中添加如下代碼:
MembershipCreateStatus status;
Membership.CreateUser(Username.Text,Password.Text,E mail.Text,Question.Text,
Answer.Text,false,out status);
Response.Write(GetErrorMessage(status));
運行窗體,然后在創(chuàng)建用戶表單中輸入相應(yīng)的值,單擊“創(chuàng)建用戶”按鈕,則該安全用戶編程創(chuàng)建成功。
4.2 編程方式完成角色管理的代碼實現(xiàn)
角色管理是指創(chuàng)建、刪除、查詢、分配角色的操作。這些操作可以通過Roles類中提供的一系列方法來完成。所有操作均基于引用了System.Web.Security命名空間,且必須建立在完成了第3節(jié)所有配置的基礎(chǔ)之上。
(1)創(chuàng)建新角色
創(chuàng)建一個新角色可以使用Roles類的CreateRole()方法來實現(xiàn),其語法格式為:
Roles.CreateRole(RoleName);
其中,RoleName參數(shù)表示希望創(chuàng)建的新角色名稱。例:
Roles.CreateRole(”admin”);
則創(chuàng)建了一個名為admin的角色。
(2)為用戶分配角色
為數(shù)據(jù)庫中現(xiàn)有用戶分配角色可以使用Roles類的AddUser ToRole()方法來實現(xiàn),例:
Roles.AddUserToRole(“郭某某”,”admin”);
意為將用戶郭某某添加到admin角色中。
依此做法,都將能以編程的方式完成用戶、角色的添加、刪除、查詢、更新等一系列操作,限于篇幅,此處再不贅述。
所謂“網(wǎng)站訪問規(guī)則”是指為網(wǎng)站中不同的文件夾分配可以訪問的用戶或角色。為網(wǎng)站創(chuàng)建訪問規(guī)則可以有兩種方法:
5.1 用“asp.net網(wǎng)站管理工具”創(chuàng)建
可以借助“asp.net網(wǎng)站管理工具”可視化界面操作完成對每個文件夾的安全配置,如圖4所示。
圖4 文件夾的安全配置
注意,此時在“asp.net網(wǎng)站管理工具”中所做的所有操作,都將保存在系統(tǒng)數(shù)據(jù)庫即我們指定的數(shù)據(jù)庫中。
每個目錄的訪問規(guī)則可以由若干條組成,但執(zhí)行的順序為自上而下,當(dāng)某一條目被匹配后后續(xù)的條目不再處理,所以設(shè)置規(guī)則時條目的排列十分重要。
5.2 直接手動配置每個目錄的web.config文件
Web.config是一個XML文件,我們隨時都可以通過記事本編輯此文件,完成對網(wǎng)站目錄的安全配置。例,手動配置網(wǎng)站a dmin目錄下的web.config文件,配置內(nèi)容如下:
<allow roles="超級管理員" />意思為此admin目錄超級管理員可以訪問,<deny roles="普通用戶" />普通用戶不能訪問。
理解了上述語法含義,程序員就可以輕松的使用記錄事本編輯web.config文件,達(dá)到修改或創(chuàng)建網(wǎng)站訪問規(guī)則的目的。
本文所探討內(nèi)容在win7+vs2010下均測試通過。
總之,實現(xiàn)網(wǎng)站安全管理的手段有很多,但通過Members API以編程的方式實現(xiàn),將使網(wǎng)站安全管理更加靈活、強大,同時在數(shù)據(jù)遷移及網(wǎng)站發(fā)布方面將帶來意想不到的便利。
[1]崔森,關(guān)六三,彭煒.ASP.NET程序設(shè)計(C#版)[M].北京:機(jī)械工業(yè)出版社,2013.