第4章__Struts_2輸入校驗(yàn)_第1頁
第4章__Struts_2輸入校驗(yàn)_第2頁
第4章__Struts_2輸入校驗(yàn)_第3頁
第4章__Struts_2輸入校驗(yàn)_第4頁
第4章__Struts_2輸入校驗(yàn)_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第4章 Struts 2輸入校驗(yàn) 輸入校驗(yàn)分為客戶端校驗(yàn)和服務(wù)器端校驗(yàn)??蛻舳诵r?yàn)可以過濾掉用戶的錯(cuò)誤操作,是第一道防線,一般使用JavaScript代碼實(shí)現(xiàn)。僅有客戶端驗(yàn)證還是不夠的。攻擊者還可以繞過客戶端校驗(yàn)直接進(jìn)行非法輸入,這樣可能會(huì)引起系統(tǒng)的異常,所以必須加上服務(wù)器端的驗(yàn)證。但僅有服務(wù)器端驗(yàn)證也是不行的,客戶的錯(cuò)誤操作總是提交到服務(wù)器,由服務(wù)器端進(jìn)行驗(yàn)證返回錯(cuò)誤信息,這樣會(huì)加重服務(wù)器的負(fù)擔(dān)。所以客戶端驗(yàn)證和服務(wù)器端驗(yàn)證缺一不可,兩者結(jié)合起來才可以構(gòu)建健壯的系統(tǒng)。4.1 輸入校驗(yàn)的意義 4.1.1 什么是輸入校驗(yàn) 4.1.2 為什么要進(jìn)行輸入校驗(yàn) 4.1.1 什么是輸入校驗(yàn)輸入校驗(yàn),從字

2、面上來看好像是指對如輸入的密碼或者用戶名輸入錯(cuò)誤的校驗(yàn)。其實(shí)這個(gè)不算輸入校驗(yàn),這個(gè)算是業(yè)務(wù)邏輯的判斷了。輸入校驗(yàn)是對輸入的用戶名長度、密碼長度、年齡信息等的判斷。為了給大家一個(gè)感官上的認(rèn)識(shí),現(xiàn)在打開163郵箱的注冊頁面,如圖4-1所示。4.1.2 為什么要進(jìn)行輸入校驗(yàn)?zāi)菫槭裁匆M(jìn)行輸入校驗(yàn)?zāi)??使用它有什么好處呢?為了更好地說明,來看下面這個(gè)注冊頁面,如圖4-3所示。現(xiàn)在按常規(guī)輸入用戶注冊信息,單擊“注冊”按鈕進(jìn)行注冊。頁面跳轉(zhuǎn)到注冊信息顯示頁,如圖4-4所示。4.2 客戶端校驗(yàn) 輸入校驗(yàn)分為客戶端校驗(yàn)和服務(wù)器端校驗(yàn)??蛻舳诵r?yàn)可以過濾掉用戶的錯(cuò)誤操作,是第一道防線,一般使用JavaScript

3、代碼實(shí)現(xiàn)。下面介紹如何通過編寫JavaScript來實(shí)現(xiàn)客戶端校驗(yàn)。4.2.1 正則表達(dá)式 客戶端校驗(yàn)一般都使用JavaScript來進(jìn)行輸入的校驗(yàn)。JavaScript對輸入判斷都會(huì)使用到正則表達(dá)式。正則表達(dá)式是字符串處理的利器,功能非常強(qiáng)大。 正則表達(dá)式的功能非常強(qiáng)大,通過它可以進(jìn)行字符串匹配、字符串查找、字符串替換。今天重點(diǎn)介紹字符串的匹配功能,字符串的匹配功能對于輸入校驗(yàn)提供了很大的幫助。先看下面簡單的正則表達(dá)式的示例。 正則表達(dá)式:a.b 匹配abb,acb,等 “.“是正則表達(dá)式的特殊字符,它的含義是匹配所有的字符還有空格和Tab鍵。4.2.2 JavaScript中使用正則表達(dá)式

4、 下面以一個(gè)簡單示例來介紹在JavaScript中使用正則表達(dá)式進(jìn)行字符串匹配。程序要求必須輸入數(shù)字,如果輸入的不是數(shù)字就彈出提示,代碼如下所示。4.2.3 JavaScript完成客戶端校驗(yàn)現(xiàn)在為注冊示例添加客戶端校驗(yàn)功能。首先來看下有哪些輸入校驗(yàn)規(guī)則。(1)用戶名、密碼、確認(rèn)密碼必須輸入。(2)用戶名只能是數(shù)字或者字母,長度為620之間。(3)密碼,確認(rèn)密碼必須是數(shù)字或者字母,長度為620之間。(4)密碼和確認(rèn)密碼必須相同。(5)年齡必須為整數(shù)而且必須是有效的年齡值。(6)出生日期必須為正確的日期格式如1988-01-03,而且只能是19*年到200*年之間。(7)郵箱地址必須為合法的郵箱

5、地址。4.3 服務(wù)器端校驗(yàn) 前面介紹了如何添加客服端校驗(yàn),但是僅有客戶端驗(yàn)證還是不夠的。攻擊者還可以繞過客戶端校驗(yàn)直接進(jìn)行非法輸入,這樣可能會(huì)引起系統(tǒng)的異常,所以必須加上服務(wù)器端的驗(yàn)證。下面來看如何添加服務(wù)器端校驗(yàn)。4.3.1 服務(wù)器端校驗(yàn)的重要性在上一個(gè)示例中為注冊頁面添加了客戶端校驗(yàn),如果用戶輸入的信息不合法則無法提交。這時(shí)這里要注意的時(shí),使用JavaScript增加客戶端校驗(yàn)僅僅使得非法的數(shù)據(jù)無法提交,但是一些侵入者完全可以采用其他的方式來進(jìn)行提交。下面來看如何繞過這些JavaScript校驗(yàn)代碼?首先可以直接把這個(gè)注冊頁面下載下來,然后通過刪除那些JavaScript代碼,再修改表單的

6、提交地址。這樣的話,就算是輸入不合法的信息,客戶端校驗(yàn)也起不了作用了,因?yàn)檫BJavaScript代碼都被刪除掉了。通過一種如此簡單的方法就可以繞過這些JavaScript校驗(yàn)代碼。那些侵入者很可能使用更加高級的手段來繞過這些JavaScript代碼,從而直接提交非法的數(shù)據(jù)。要避免這種情況就必須添加服務(wù)器端校驗(yàn),服務(wù)端校驗(yàn)是整個(gè)Web應(yīng)用中最重要的一道防線。用戶使無法直接接觸到服務(wù)器端代碼的,這樣的話就算是客戶端校驗(yàn)被人繞過,仍然能夠通過服務(wù)器端校驗(yàn)來阻止用戶的非法輸入。服務(wù)器端校驗(yàn)對于系統(tǒng)的安全性、完整性、健壯性起到了至關(guān)重要的作用。那是不是客戶端校驗(yàn)根本就沒有什么意義了呢?其實(shí)不是,因?yàn)椴⒉?/p>

7、是每個(gè)用戶都有這樣惡意侵入的想法。大部分的用戶都是采用的正常的輸入,使用客戶端校驗(yàn)?zāi)軌蜻^濾掉用戶的錯(cuò)誤操作。如果沒有客戶端校驗(yàn),那么就算用戶只是一個(gè)錯(cuò)誤的操作,服務(wù)器端就要對其輸入的信息進(jìn)行處理并返回錯(cuò)誤提示,這樣會(huì)大大增加服務(wù)器端的負(fù)載??蛻舳诵r?yàn)就像是一把鎖,能夠防君子但是不能防小人。同樣客戶端校驗(yàn)和服務(wù)器端校驗(yàn)是緊密結(jié)合的,兩者缺一不可。4.3.2 完成服務(wù)器端輸入校驗(yàn) 現(xiàn)在以上面那個(gè)示例的要求來添加服務(wù)器端校驗(yàn)。為了能更好地觀察服務(wù)器端輸出的錯(cuò)誤信息,暫時(shí)不使用客戶端的校驗(yàn)代碼。這里只是暫時(shí)地去掉客戶端校驗(yàn)代碼,這樣才能更好地查看服務(wù)端校驗(yàn)的效果。步驟如下所示。 首先新建一個(gè)用戶注冊頁

8、。在輸入頁中除了輸入表單外,添加一個(gè)標(biāo)簽用來輸出actionerror中的錯(cuò)誤信息。4.3.3 測試服務(wù)器端輸入校驗(yàn)現(xiàn)在打開用戶注冊頁,不輸入任何數(shù)據(jù),單擊“提交”按鈕,頁面將提示按要求進(jìn)行輸入的錯(cuò)誤信息,如圖4-10所示。因?yàn)槌绦蛞筝斎胗脩裘?、密碼、確認(rèn)密碼必須輸入,所以會(huì)提示要求用戶進(jìn)行輸入。同樣假如輸入錯(cuò)誤非法的出生日期。如“1000-02-03”時(shí),單擊“提交”按鈕,頁面將會(huì)提示要求用戶輸入有效的出生日期,如圖4-11所示。4.3.4 使頁面保留提交信息 如果希望表單中能夠保留提交的信息,可以在表單的每個(gè)元素中添加value屬性,并設(shè)置值,如下所示。4.3.5 使用addFieldE

9、rror來添加錯(cuò)誤信息在前面介紹了使用actionError來保存輸入校驗(yàn)錯(cuò)誤提示信息。actionError其實(shí)就是一個(gè)ArrayList,將錯(cuò)誤信息保存在actionError中,其實(shí)就是保存在一個(gè)ArrayList中。前面曾講過類型轉(zhuǎn)換的錯(cuò)誤信息是保存在fieldError中,同樣輸入校驗(yàn)的錯(cuò)誤信息也可以通過addFieldError方法來保存到fieldError中。fieldError和actionError不同的是,fieldError是采用Map結(jié)構(gòu)來存儲(chǔ)的,所以都是以鍵值對來保存信息。那到底是使用fieldError來保存錯(cuò)誤提示信息還是使用actionError好呢?這個(gè)就依

10、據(jù)項(xiàng)目具體要求而定了,如果只是希望在頁面中單純的顯示錯(cuò)誤提示信息,可以使用actionError來保存錯(cuò)誤提示信息;如果希望在相應(yīng)的文本框中顯示錯(cuò)誤提示信息,則需要使用fieldError來保存錯(cuò)誤提示信息。下面來看如何將錯(cuò)誤提示信息保存到fieldError中。首先可以使用addFieldError方法來替代addActionError方法,從而將錯(cuò)誤提示信息保存到fieldError中。其中addFieldError方法中包含兩個(gè)參數(shù),第一個(gè)參數(shù)用來輸入?yún)?shù)名(也可以說是Action中屬性名或者說是表單元素中的name屬性值),第二個(gè)參數(shù)用來輸入校驗(yàn)錯(cuò)誤提示信息。4.3.6 輸入校驗(yàn)與類型

11、轉(zhuǎn)換關(guān)系 下面來看輸入校驗(yàn)和類型轉(zhuǎn)換之間的關(guān)系。首先打開上面的注冊頁面,在年齡文本框中輸入一個(gè)非法的信息,如“aa”。這時(shí)頁面將顯示錯(cuò)誤信息,如圖4-16所示。4.4 動(dòng)態(tài)方法調(diào)用以及校驗(yàn)動(dòng)態(tài)方法 Struts 2允許在一個(gè)Action中包含多個(gè)處理邏輯,從而通過調(diào)用Action中不同的方法來處理請求。同樣對于每個(gè)處理邏輯,都可以提供相應(yīng)的校驗(yàn)方法。下面介紹如何添加動(dòng)態(tài)方法調(diào)用以及校驗(yàn)動(dòng)態(tài)方法的使用。4.4.1 動(dòng)態(tài)方法調(diào)用Struts 2允許在一個(gè)Action中包含多個(gè)處理邏輯。例如在同一個(gè)表單中,用戶通過不同的按鈕提交表單時(shí),在Action中調(diào)用不同的方法來處理請求。下面來看一個(gè)簡單示例。

12、首先新建如下的JSP頁面。該頁面同前面的用戶注冊頁非常類似,不同的是增加了一個(gè)刪除按鈕,代碼如下所示。4.4.2 為action元素指定method屬性上次通過在“刪除”按鈕中指定其action屬性值為register!deleteUser,從而示將表單提交給配置名為regist的Action的deleteUser方法來處理。發(fā)現(xiàn)指定action屬性值為register!deleteUser這樣的方式比較麻煩。如果能夠像“注冊”按鈕那樣直接提交給一個(gè)register應(yīng)該會(huì)比較好一點(diǎn)。這個(gè)時(shí)候要借助于struts.xml配置文件了。在元素中指定action的method屬性,則可以讓Action

13、類調(diào)用指定的方法,代碼如下所示。通過這種方法,就好比將一個(gè)Action定義成了多個(gè)邏輯上的Action,Action類的每個(gè)處理方法被映射成一個(gè)邏輯Action。4.4.3 校驗(yàn)動(dòng)態(tài)方法前面介紹的在一個(gè)Action中包含多個(gè)處理邏輯,不同處理邏輯對應(yīng)不同的方法。那如何定義輸入校驗(yàn)來校驗(yàn)這些處理邏輯呢?下面來看一個(gè)簡單示例,首先將上一示例中的Action中添加一個(gè)validate()方法,該方法將在控制臺(tái)上簡單的打印一句話,代碼如下所示。public void validate() System.out.println(validate method);這里為了簡單測試,并不輸入任何的用戶信息。直接單擊“注冊”按鈕,在控制臺(tái)將打印如下語句:validate methodexecute method從控制臺(tái)打印的語句可以看出,在Action中首先執(zhí)行了validate()校驗(yàn)方法,然后再執(zhí)行execute()處理邏輯方法。如果單擊“刪除”按鈕,在控制臺(tái)將打印如下語句。validate methoddelete method4.4.4 Struts 2輸入校驗(yàn)流程為了能夠更加了解輸入校驗(yàn)的流程,下面來看輸入校驗(yàn)的程序流程圖,如圖4-19所示。4.5 小結(jié) 本章首先介紹了什么是輸入校驗(yàn),為什么要進(jìn)行輸入校驗(yàn)。介紹了輸入

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論