劉紅坤
(保定市氣象局,河北保定 071000)
傳統(tǒng)的Web開發(fā)模式是同步進行,基于Ajax的開發(fā)模式是異步進行,客戶端只需按需取數(shù)據(jù),用戶的行為經(jīng)過Ajax引擎處理,服務(wù)器只有取數(shù)據(jù)時才工作,因此提高了運行效率,異步模式在Web系統(tǒng)開發(fā)中廣泛應(yīng)用。
傳統(tǒng)的Web系統(tǒng)身份認(rèn)證是用戶輸入用戶名等信息提交后進行驗證,如果有一項輸入錯誤,所有的認(rèn)證表單信息都得重新填寫。而Ajax模式下,用戶輸入一項表單信息后,即可給出輸入信息正確與否的提示,用戶不用等待,其中一項錯誤,只需改正此項輸入信息,其它信息不受影響。這種方式提高了系統(tǒng)運行效率,高效實現(xiàn)了Web系統(tǒng)的身份認(rèn)證功能。
傳統(tǒng)的在Web系統(tǒng)一般只采用口令認(rèn)證方式,很容易被不法分子攻擊,系統(tǒng)安全系數(shù)不高,同時數(shù)據(jù)庫中如果有只能被授權(quán)用戶訪問和使用的重要資源很不安全。為了提高系統(tǒng)的安全性,在基本的身份認(rèn)證基礎(chǔ)上,利用圖形驗證碼和權(quán)限訪問控制功能實現(xiàn)身份認(rèn)證,可防止非法用戶的訪問。
Ajax[1]是 Asynchronous JavaScript And XML(異步 JavaS-cript和XML)縮寫,它并不是一項新技術(shù),而是多種成熟技術(shù)的集合。包括 DOM、XML和 XSLT、XHTML和 CSS、XMLHttpRequest對象和JavaScript等。
Ajax原理[1,2]相當(dāng)于在用戶和服務(wù)器間增加一個中間層—Ajax引擎,使用戶操作與服務(wù)器響應(yīng)異步化。并不是所有的用戶請求都提交給服務(wù)器,一些數(shù)據(jù)驗證和處理由Ajax在客戶端來完成,只有確需從服務(wù)器讀取數(shù)據(jù)時,才由客戶端通過JavaScript調(diào)用Ajax引擎,向服務(wù)器端發(fā)出請求,不需等待請求響應(yīng),用戶可以繼續(xù)進行其它操作。服務(wù)器端返回數(shù)據(jù)時,Ajax引擎接收數(shù)據(jù),JavaScript函數(shù)完成結(jié)果處理工作。不用刷新整個頁面,部分頁面的數(shù)據(jù)更新已完成。服務(wù)器負(fù)擔(dān)的一些工作轉(zhuǎn)接到客戶端,利用客戶端的閑置能力來處理,服務(wù)器和瀏覽器之間交換數(shù)據(jù)大量減少,從而減輕服務(wù)器和帶寬負(fù)擔(dān)。Ajax開發(fā)工作流程為一個異步通信過程:對象初始化-發(fā)送請求-服務(wù)器接受-服務(wù)器返回-客戶端接受-更新客戶端頁面內(nèi)容。
Ajax具有很多優(yōu)點:減輕服務(wù)器負(fù)擔(dān),Ajax的原則是“按需取數(shù)據(jù)”,可最大程度的減少冗余請求和相應(yīng)服務(wù)器造成的負(fù)擔(dān);局部刷新頁面,減少用戶等待時間,具有更好的用戶體驗;服務(wù)器負(fù)擔(dān)的部分工作轉(zhuǎn)嫁到客戶端,利用客戶端閑置的能力來處理,減輕了服務(wù)器和帶寬的負(fù)擔(dān),節(jié)約空間和帶寬租用成本;可調(diào)用外部數(shù)據(jù);基于標(biāo)準(zhǔn)化并廣泛支持技術(shù),不需要下載插件或小程序;使Web中頁面呈現(xiàn)與數(shù)據(jù)分離等。
用戶在Web頁面的用戶名表單輸入用戶名信息后,鼠標(biāo)離開,觸發(fā)表單的onBlur事件,數(shù)據(jù)信息傳遞給Ajax引擎,由Ajax引擎來處理,用JavaScript編寫的程序代碼實現(xiàn)Ajax引擎功能。Ajax引擎實例化為一個XMLHttpRequest對象,通過該對象向服務(wù)器發(fā)出所需的數(shù)據(jù),將其結(jié)果返回給客戶端瀏覽器,頁面即可顯示用戶是否存在的結(jié)果信息。
如果用戶存在,下一步驗證密碼信息輸入是否正確,驗證方法同用戶名。
圖形驗證碼是Web系統(tǒng)進行身份認(rèn)證的有效措施,用戶打開Web頁面,驗證碼顯示在頁面上,用戶輸入驗證碼后,觸發(fā)表單的onBlur事件,由Ajax對象的XMLHttpRequest對象完成用戶輸入的驗證碼與數(shù)據(jù)庫存放的驗證碼驗證過程,并給出相應(yīng)的提示。如果輸入錯誤,Ajax的XMLHttpRequest對象會異步動態(tài)地向服務(wù)器的圖形驗證碼程序所要新的驗證碼圖片,同時數(shù)據(jù)庫的驗證碼數(shù)據(jù)記錄及時更新。XMLHttpRequest對象將圖形驗證碼返回客戶端顯示在表單頁面的指定區(qū)域。驗證碼使用一次后,由服務(wù)器端的圖形驗證碼生成程序產(chǎn)生新的驗證碼,驗證碼數(shù)據(jù)庫與頁面表單同時刷新,因此驗證碼具有一次性特點。圖形驗證碼是以點陣非文本方式呈現(xiàn)給用戶的,多變驗證碼與加上多種方式處理過的背景合成圖形驗證碼。經(jīng)過以上各種技術(shù)的綜合處理,圖形驗證碼信息很難被非法用戶捕獲及識別。
如果用戶通過了用戶名、密碼、圖形驗證碼驗證后,下一步進行用戶權(quán)限的身份認(rèn)證,不同身份用戶具有不同的訪問權(quán)限,根據(jù)系統(tǒng)管理員分配的權(quán)限,用戶進入相應(yīng)功能頁面。此功能對身份認(rèn)證功能實現(xiàn)具有積極意義。
綜上所述,Web系統(tǒng)身份認(rèn)證高效、安全、可防止攻擊者的破壞活動。
以用戶名檢測為例來說明具體實現(xiàn)過程:
下面使用XMLHttpRequest對象的open()方法向服務(wù)器發(fā)送請求取得數(shù)據(jù),主要代碼如下:
處理服務(wù)器返回數(shù)據(jù),判斷數(shù)據(jù)是否存在,根據(jù)結(jié)果給出響應(yīng)的提示信息:
經(jīng)過以上步驟向服務(wù)器發(fā)出請求完畢,且取得了數(shù)據(jù)。在表單失去焦點的事件中激發(fā)Ajax引擎,動態(tài)更新瀏覽器中從服務(wù)器返回的內(nèi)容,更新時不用重載頁面的所有內(nèi)容,只需更新部分即可。觸發(fā)焦點代碼:
<input type="text"name="txtUsername"id="txtUsername"onBlur="userstartRequest(alg);"/>
實現(xiàn)Web系統(tǒng)身份認(rèn)證功能的界面如下:
圖1 實現(xiàn)Web系統(tǒng)身份認(rèn)證功能的界面圖
驗證通過后,根據(jù)用戶的訪問權(quán)限不同,分配給用戶訪問不同功能的頁面。代碼如下:
本文采用Ajax異步交互方式來進行用戶名、密碼和驗證碼的檢測,提高了系統(tǒng)的驗證速度;采用圖形驗證碼點陣存儲信息的特點,提高Web系統(tǒng)安全性;采用權(quán)限訪問控制進一步增強系統(tǒng)安全。
[1]潘凱華,鄒天思.PHP開發(fā)實戰(zhàn)寶典[M].北京:清華大學(xué)出版社,2010.
[2]梁文新,宋強,劉凌霞,等.Ajax+PHP程序設(shè)計實戰(zhàn)詳解[M].北京:清華大學(xué)出版社,2010.