ASP.NET數(shù)據(jù)驗(yàn)證技術(shù)研究詳解
引 言
隨著ASP.NET技術(shù)為代表的新的Web技術(shù)的發(fā)展,Web在各行各業(yè)得到廣泛的應(yīng)用,其功能越來越復(fù)雜,也越來越強(qiáng)大。Web開發(fā)中的一個(gè)很重要的問題就是,如何設(shè)計(jì)安全有效的Web程序,可以保護(hù)存儲(chǔ)的重要信息,以降低其受攻擊的危險(xiǎn)。
數(shù)據(jù)驗(yàn)證是驗(yàn)證用戶標(biāo)識(shí)真實(shí)性的過程,用以鑒別用戶身份是否合法。ASP.NET中,在編寫Web應(yīng)用程序時(shí),用戶保存或者處理信息,就需要判斷其有效性和安全性。由于Web應(yīng)用程序是基于請(qǐng)求/響應(yīng)模式的,所以Web的數(shù)據(jù)驗(yàn)證有多種方式。可以在服務(wù)器端直接對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證,也可以編寫客戶端腳本來實(shí)現(xiàn)數(shù)據(jù)有效性的驗(yàn)證,當(dāng)這些數(shù)據(jù)提交給服務(wù)器時(shí)就經(jīng)過了驗(yàn)證。在實(shí)際的項(xiàng)目開發(fā)中,既需要客戶端驗(yàn)證,也需要服務(wù)器驗(yàn)證。
2 幾種常用的ASP.NET數(shù)據(jù)驗(yàn)證技術(shù)
2.1 基于圖片和附加碼的ASP.NET數(shù)據(jù)驗(yàn)證
目前實(shí)現(xiàn)圖片驗(yàn)證碼時(shí)有兩種方式:
(1)通過動(dòng)態(tài)數(shù)據(jù)網(wǎng)頁中的各種腳本來實(shí)現(xiàn)。
(2)用支持動(dòng)態(tài)數(shù)據(jù)網(wǎng)頁的第二方組件來實(shí)現(xiàn)。
組件的應(yīng)用會(huì)提高效率,比較容易實(shí)現(xiàn),在ASP.NET中編寫基本的腳本,賦予其必要的屬性,例如生成碼顏色,碼位數(shù),碼尺寸等,就可以靈活地生成一組驗(yàn)證碼。驗(yàn)證碼圖片一般放在用戶名和用戶密碼的后邊即可,也可以根據(jù)需要放置。附加碼通常由服務(wù)器隨機(jī)產(chǎn)生,一般是由數(shù)字和字母組成的一串字符,顯示在登陸頁面中,用戶登錄時(shí)必須將附加碼一并輸入提交,服務(wù)器對(duì)提交的驗(yàn)證碼同時(shí)進(jìn)行驗(yàn)證。
2.2 Web表單ASP.NET數(shù)據(jù)驗(yàn)證
在ASP.NET中,被指定為runat=“server”的表單被稱為Web表單,Web表單本身是基于服務(wù)器的,是ASP.NET用來為應(yīng)用程序提供大部分功能框架的一部分,服務(wù)器對(duì)界面的情況一清二楚,也就是說用戶元素只能在服務(wù)器上創(chuàng)建。當(dāng)用戶輸人完數(shù)據(jù)提交表單時(shí),服務(wù)器將通過另外的頁面來驗(yàn)證Web表單中所輸入數(shù)據(jù)是否有效。表單在實(shí)現(xiàn)驗(yàn)征方面具有靈活性和易于實(shí)現(xiàn)性,其數(shù)據(jù)驗(yàn)證功能比較強(qiáng)大,開發(fā)人員既可以把用戶信息放在Web.config文件中,也可以將用戶的驗(yàn)證信息放在數(shù)據(jù)庫或XML文件中,通過創(chuàng)建自己定義的程序來驗(yàn)證數(shù)據(jù)。
2.3 Web窗體ASP.NET數(shù)據(jù)驗(yàn)證
ASP.NET框架還提供了一種新型的數(shù)據(jù)驗(yàn)證,他將使用Web服務(wù)器控件來實(shí)現(xiàn)數(shù)據(jù)的驗(yàn)證,稱其為Web窗體數(shù)據(jù)驗(yàn)證技術(shù)。因此,把專門用于Web數(shù)據(jù)驗(yàn)證的Web服務(wù)器控件稱為Web數(shù)據(jù)驗(yàn)證控件。ASP.NET中有6種數(shù)據(jù)驗(yàn)證控件,這里著重介紹靈活強(qiáng)大CustomVal-idator控件,假設(shè)現(xiàn)在建立一個(gè)與數(shù)學(xué)有關(guān)的網(wǎng)站,在這個(gè)網(wǎng)站,要求瀏覽者提供自己喜歡的質(zhì)數(shù),以此來提高網(wǎng)站的訪問量。在ASP.NET中,沒有一個(gè)專門驗(yàn)證質(zhì)數(shù)的服務(wù)器端數(shù)據(jù)驗(yàn)證控件,這樣,就有必要用到CustomValida-tor控件。以下例子用來驗(yàn)證用戶輸入的數(shù)是不是質(zhì)數(shù):
2.4 使用客戶端腳本實(shí)現(xiàn)ASP.NET服務(wù)器控件的ASP.NET數(shù)據(jù)驗(yàn)證
為了減少數(shù)據(jù)驗(yàn)證時(shí)瀏覽器和服務(wù)器之間的往返時(shí)間,可采用客戶端腳本來實(shí)現(xiàn)其功能,在瀏覽器中使用的腳本有很多,如VBScript,JSCript,JavaScript等,但是這樣存在安全隱患,因?yàn)橛脩艨梢匀我庑薷目蛻舳四_本以跳過客戶端的驗(yàn)證,還有些瀏覽器是不支持客戶端腳本的,這樣的數(shù)據(jù)驗(yàn)證就必須在服務(wù)器端進(jìn)行。
2.5 使用正則表達(dá)式進(jìn)行ASP.NET數(shù)據(jù)驗(yàn)證
正則表達(dá)式(Regular Expression)是由普通字符(稱為原義字符)和特殊字符(稱為元字符)組成的字符串,用來定義字符處理時(shí)需要匹配的內(nèi)容模式。也就是說,正則表達(dá)式可以讓用戶通過使用一系列的特殊字符構(gòu)建匹配模式,然后把匹配模式與Web頁面的表單輸入等目標(biāo)對(duì)象進(jìn)行比較,根據(jù)比較對(duì)象中是否包含匹配模式,以執(zhí)行相應(yīng)的處理操作。對(duì)于處理字符串的許多應(yīng)用程序而言,正則表達(dá)式是不可缺少的模式描述工具。
例:定義一個(gè)匹配我國居民身份證號(hào)碼格式的正則表達(dá)式。分析:我國居民身份證號(hào)碼規(guī)定的合法格式為15位或18位數(shù)字。根據(jù)語法規(guī)定,對(duì)應(yīng)的正則表達(dá)式應(yīng)寫為:“\d{15}| \d{18}”。
3 對(duì)象成員ASP.NET數(shù)據(jù)驗(yàn)證組件實(shí)現(xiàn)
以上的數(shù)據(jù)驗(yàn)證技術(shù)在數(shù)據(jù)驗(yàn)證方面起著重要的作用,有著各自不同的特點(diǎn).他們都是經(jīng)過UI邏輯的數(shù)據(jù)驗(yàn)證,經(jīng)過UI邏輯驗(yàn)證數(shù)據(jù)后,通過開發(fā)對(duì)象成員數(shù)據(jù)驗(yàn)證組件來進(jìn)行下一步的業(yè)務(wù)邏輯的驗(yàn)證,可以較大程度上提高數(shù)據(jù)的安全性。
大多數(shù)情況下,在UI經(jīng)過驗(yàn)證的數(shù)據(jù)就交給業(yè)務(wù)邏輯進(jìn)行處理,而業(yè)務(wù)邏輯往往不會(huì)對(duì)數(shù)據(jù)再進(jìn)行驗(yàn)證操作。業(yè)務(wù)邏輯認(rèn)為數(shù)據(jù)來源于UI,在UI驗(yàn)證數(shù)據(jù)就已經(jīng)夠安全,如果在業(yè)務(wù)邏輯再進(jìn)行一次驗(yàn)證有點(diǎn)多此一舉。而業(yè)務(wù)邏輯本身就是一個(gè)獨(dú)立體,把數(shù)據(jù)的合法性依賴于UI是不應(yīng)該的,不合理的。但在業(yè)務(wù)邏輯中對(duì)成員的數(shù)據(jù)驗(yàn)證并不像UI那樣有著方便的驗(yàn)證控件,如果手動(dòng)對(duì)每個(gè)數(shù)據(jù)成員進(jìn)行編碼驗(yàn)證的確會(huì)增加很大的工作量。為了解決這方面問題,將通過Custom Attribute的方式來簡(jiǎn)化對(duì)象成員數(shù)據(jù)驗(yàn)證的功能;為了簡(jiǎn)化驗(yàn)證代碼的編寫,將通過Attribute來配置對(duì)象成員需要驗(yàn)證的方式,然后通過容器進(jìn)行統(tǒng)一驗(yàn)證。
為了規(guī)定一個(gè)統(tǒng)一的驗(yàn)證規(guī)則,制定一個(gè)驗(yàn)汪對(duì)象基礎(chǔ)類:
當(dāng)定義了驗(yàn)證的方式后就可以通過組件的容器對(duì)類的實(shí)例進(jìn)行數(shù)據(jù)驗(yàn)證。
把需要驗(yàn)證的類型添加到容器中,通過容器的Vialid 方法對(duì)實(shí)例進(jìn)行驗(yàn)證。
4 ASP.NET數(shù)據(jù)驗(yàn)證結(jié)語
通過對(duì)多種數(shù)據(jù)驗(yàn)證技術(shù)的學(xué)習(xí),可以增加Web的安全性,綜合學(xué)習(xí)這些知識(shí)以及ASP.NET和.NET框架的其他功能,就可以編寫出功能強(qiáng)大的Web應(yīng)用程序。今后在對(duì)數(shù)據(jù)驗(yàn)證技術(shù)的研究中,可以將數(shù)據(jù)驗(yàn)證的實(shí)現(xiàn)從配置XML文件中分離出來,即用戶不需要知道如何使用這些XML文件,而是通過一個(gè)友好界面來配置要進(jìn)行的數(shù)據(jù)驗(yàn)證。
ASP.NET數(shù)據(jù)驗(yàn)證的相關(guān)內(nèi)容就向你介紹到這里,希望對(duì)你了解ASP.NET數(shù)據(jù)驗(yàn)證有所幫助。
【編輯推薦】