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