AJAX即“Asynchronous Javascript And XML”(異 步JavaScript和XML),是一種創(chuàng)建交互式網(wǎng)頁(yè)應(yīng)用的網(wǎng)頁(yè)開(kāi)發(fā)技術(shù)。
AJAX技術(shù)可以在不重新加載整個(gè)網(wǎng)頁(yè)的情況下,對(duì)網(wǎng)頁(yè)的某部分進(jìn)行更新。不使用 AJAX的傳統(tǒng)網(wǎng)頁(yè),如果需要更新內(nèi)容,必須重載整個(gè)網(wǎng)頁(yè)頁(yè)面。
AJAX的特點(diǎn)是頁(yè)面無(wú)刷新,用戶(hù)的體驗(yàn)非常好;使用異步方式與服務(wù)器通信,具有更加迅速的響應(yīng)能力;AJAX的原則是“按需取數(shù)據(jù)”,可以最大程度的減少冗余請(qǐng)求,和響應(yīng)對(duì)服務(wù)器造成的負(fù)擔(dān);基于標(biāo)準(zhǔn)化的并被廣泛支持的技術(shù),不需要下載插件或者小程序;AJAX不支持瀏覽器back按鈕。
利用AJAX的特點(diǎn),在編寫(xiě)網(wǎng)站程序時(shí),隱藏網(wǎng)站目錄結(jié)構(gòu),可以在一定程度上提高網(wǎng)站的安全性,增加惡意攻擊的難度。
圖1 網(wǎng)站目錄結(jié)構(gòu)
下面就以ASP程序進(jìn)行說(shuō)明,其他編程語(yǔ)言做法類(lèi)似。
網(wǎng)站目錄結(jié)構(gòu)如圖1:
CSS目錄存放樣式文件,JS目錄存放JS腳本程序,真正實(shí)現(xiàn)網(wǎng)站邏輯的程序放在INC目錄。目錄名稱(chēng)可以自由選擇,這里只是使用常規(guī)命名,網(wǎng)站根目錄下一個(gè)login.htm文件,網(wǎng)頁(yè)使用AJAX發(fā)送請(qǐng)求,使用靜態(tài)文件即可。
如果沒(méi)有JQUERY和AJAX功能,這個(gè)網(wǎng)頁(yè)就什么都沒(méi)有顯示。通過(guò)login.js中 的onload()函 數(shù)請(qǐng) 求inc/login.asp文件,把返回的數(shù)據(jù)傳給divcontent.innerhtml屬性,從而顯示出用戶(hù)登錄界面。這時(shí),如果通過(guò)右鍵查看源文件,只能看到Login.htm文件的內(nèi)容,而看不到輸入姓名、登錄密碼等文本框的內(nèi)容。
Inc/login.asp文件與普通網(wǎng)頁(yè)文件是一樣的,只不過(guò)缺少了HTML頭部?jī)?nèi)容,使用常見(jiàn)的網(wǎng)頁(yè)編輯程序就可以完成編寫(xiě),然后去掉頭尾部分即可。
由于Inc/login.asp文件的”btn1”按鈕 onclick事件綁定btnclk()函數(shù),點(diǎn)擊“登錄”按鈕時(shí),訪問(wèn)inc/chklogin.asp文件,進(jìn)行身份驗(yàn)證,如果通過(guò)身份驗(yàn)證,執(zhí)行 display(2),訪問(wèn)inc/ t_ tbStruc.asp文件,并將結(jié)果界面返回給divcontent.innerhtml屬性,從而引起界面發(fā)生改變,這時(shí),如果通過(guò)右鍵查看源文件,同樣只能看到Login.htm文件的內(nèi)容,而看不到inc/ t_ tbStruc.asp文件的內(nèi)容。
無(wú)論訪問(wèn)inc目錄下的什么文件,都是通過(guò)AJAX訪問(wèn),從而實(shí)現(xiàn)部分網(wǎng)頁(yè)更新,網(wǎng)頁(yè)的功能只與當(dāng)前的界面與JS腳本相關(guān),網(wǎng)頁(yè)相當(dāng)于一臺(tái)狀態(tài)機(jī)。無(wú)論當(dāng)前網(wǎng)頁(yè)是什么狀態(tài),按“F5”刷新頁(yè)面都會(huì)回到“l(fā)ogin.htm”界面。如果查看網(wǎng)頁(yè)源代碼則只能看到首頁(yè)的簡(jiǎn)單代碼,從而達(dá)到了隱藏網(wǎng)站程序結(jié)構(gòu)的目的,提高了網(wǎng)站的安全性。
通過(guò)對(duì)display(page)函數(shù)switch分支來(lái)進(jìn)行擴(kuò)充,以適應(yīng)不同的網(wǎng)頁(yè)請(qǐng)求。由于AJAX使用的是UTF-8編碼,所以有必要將所有文件保存為UTF-8文件格式,HTML文件頭則指明了輸出編碼為UTF-8,以防出現(xiàn)亂碼。
整個(gè)網(wǎng)站程序開(kāi)發(fā)測(cè)試完畢后,通過(guò)對(duì)JS腳進(jìn)行壓縮,去除空格和回車(chē),然后再對(duì)外發(fā)布,增加腳本的閱讀難度,進(jìn)一步提高腳本代碼的安全性。這時(shí),外部人員如果想了解網(wǎng)站的運(yùn)行邏輯及結(jié)構(gòu),只能通過(guò)分析捕獲JS腳發(fā)送及返回的數(shù)據(jù)推測(cè)得到。