專利名稱:一種轉(zhuǎn)發(fā)http請(qǐng)求的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)安全領(lǐng)域,具體涉及一種轉(zhuǎn)發(fā)HTTP請(qǐng)求的方法及裝置。
背景技術(shù):
經(jīng)過(guò)近二十年的發(fā)展,當(dāng)前互聯(lián)網(wǎng)規(guī)模已經(jīng)非常龐大,特別是作為互聯(lián)網(wǎng)主要業(yè)務(wù)之一的Web業(yè)務(wù)更是得到了極速發(fā)展,給人們獲取信息帶來(lái)了極大便利。與此同時(shí),那些為人們提供Web業(yè)務(wù)的Web網(wǎng)站的安全狀況堪憂。常見(jiàn)的安全問(wèn)題包括SQLGtructured Query Language,結(jié)構(gòu)化查詢語(yǔ)言)注入攻擊、跨站腳本攻擊以及跨站請(qǐng)求偽造等。SQL注入攻擊和跨站腳本攻擊是由于Web應(yīng)用程序在使用用戶提交的數(shù)據(jù)時(shí)沒(méi)有進(jìn)行嚴(yán)格的過(guò)濾造成的,隨著Web應(yīng)用系統(tǒng)開發(fā)者對(duì)這些安全攻擊認(rèn)識(shí)的深入,也逐漸加強(qiáng)了對(duì)用戶數(shù)據(jù)的嚴(yán)格過(guò)濾,因此,這兩類狗13安全攻擊越來(lái)越少了。CSRF(Cross SiteRequest Forgery, 跨站請(qǐng)求偽造)攻擊則是由Web應(yīng)用系統(tǒng)安全設(shè)計(jì)上的缺陷造成的,并且很多人還沒(méi)有意識(shí)到CSRF攻擊的嚴(yán)重性,因此CSRF漏洞廣泛存在于當(dāng)前的大多數(shù)Web應(yīng)用系統(tǒng)中。為了幫助本領(lǐng)域普通技術(shù)人員能夠更好理解CSRF攻擊。圖1給出了一個(gè)CSRF攻擊的工作原理圖。如圖1所示,域名為www.abc.com的信任網(wǎng)站A存在CSRF漏洞,域名為 www. hackers, com的惡意網(wǎng)站B將發(fā)起針對(duì)信任網(wǎng)站A的CSRF攻擊。惡意網(wǎng)站B利用受害者的Web客戶端向信任網(wǎng)站A發(fā)起CSRF攻擊的工作流程如下步驟1 受害者利用標(biāo)準(zhǔn)Web客戶端瀏覽信任網(wǎng)站A并登錄信任網(wǎng)站A ;步驟2 受害者登錄信任網(wǎng)站A成功,信任網(wǎng)站A通過(guò)Cookie向受害者Web客戶端推送表示登錄成功的會(huì)話ID ;步驟3 受害者在未退出信任網(wǎng)站A登錄的情況下,訪問(wèn)惡意網(wǎng)站B ;步驟4 惡意網(wǎng)站B向受害者Web客戶端返回一個(gè)Web頁(yè)面,該Web頁(yè)面中包含一個(gè)請(qǐng)求信任網(wǎng)站A敏感操作的HTML標(biāo)簽;步驟5 受害者Web客戶端在顯示來(lái)自惡意網(wǎng)站B的Web頁(yè)面時(shí)將在受害者不知情情況下自動(dòng)向信任網(wǎng)站A提交一個(gè)涉及敏感操作的HTTP請(qǐng)求(比如銀行轉(zhuǎn)賬請(qǐng)求),該 HTTP請(qǐng)求同時(shí)攜帶了步驟2中信任網(wǎng)站A推送給受害者Web客戶端的Cookie ;步驟6信任網(wǎng)站A接收到該HTTP請(qǐng)求后,通過(guò)驗(yàn)證Cookie中會(huì)話ID發(fā)現(xiàn)該Web 客戶端先前已登錄成功,因此處理該HTTP請(qǐng)求,從而達(dá)到了攻擊者攻擊目的。導(dǎo)致CSRF漏洞廣泛存在的根源在于以下幾點(diǎn)(1)為了避免頻繁的身份認(rèn)證操作給用戶體驗(yàn)帶來(lái)干擾,當(dāng)前大多數(shù)Web應(yīng)用系統(tǒng)都采用了一種類似于單點(diǎn)登錄的身份認(rèn)證方式,即只要求用戶登錄一次,登錄成功后為用戶分配唯一的用戶憑證,以后所有需要識(shí)別用戶身份和鑒別用戶權(quán)限的敏感操作都只是根據(jù)用戶憑證來(lái)驗(yàn)證該用戶是否具有相應(yīng)權(quán)限;(2)Web應(yīng)用系統(tǒng)為登錄認(rèn)證成功后用戶分配的唯一用戶憑證一般存儲(chǔ)在Cookie 中,并推送到Web客戶端;(3)標(biāo)準(zhǔn)Web客戶端在向某網(wǎng)站A提交HTTP請(qǐng)求時(shí)(包括跨域提交的HTTP請(qǐng)求),會(huì)自動(dòng)在該HTTP請(qǐng)求中攜帶網(wǎng)站A先前保存在客戶端的Cookie信息;(4)由于Web應(yīng)用系統(tǒng)設(shè)計(jì)上的缺陷,Web應(yīng)用系統(tǒng)中許多涉及敏感操作的Web表單中的所有數(shù)據(jù)都是可預(yù)先設(shè)置的,這使得攻擊者可以預(yù)先設(shè)置數(shù)據(jù)并自動(dòng)提交表單。由于CSRF漏洞先前并沒(méi)有引起人們的重視,因此,CSRF漏洞廣泛存在于當(dāng)前的大多數(shù)Web應(yīng)用系統(tǒng)中。通過(guò)修改所有Web應(yīng)用系統(tǒng)代碼來(lái)修補(bǔ)所有的CSRF漏洞是不現(xiàn)實(shí)的,因此,目前大多采用部署在Web應(yīng)用系統(tǒng)前的Web安全網(wǎng)關(guān)來(lái)防御針對(duì)Web應(yīng)用系統(tǒng)的 CSRF攻擊。目前,實(shí)現(xiàn)在Web安全網(wǎng)關(guān)上的CSRF防御方法包括(I)Web表單隨機(jī)令牌方法當(dāng)Web安全網(wǎng)關(guān)發(fā)現(xiàn)Web客戶端在請(qǐng)求一個(gè)包含Web 表單的Web頁(yè)面時(shí),將主動(dòng)修改由Web應(yīng)用系統(tǒng)返回給Web客戶端的這個(gè)包含Web表單的 Web頁(yè)面,為Web表單添加一個(gè)隱含的、隨機(jī)的和無(wú)法事先預(yù)測(cè)的CSRF令牌;當(dāng)Web客戶端通過(guò)另一個(gè)Web表單數(shù)據(jù)提交統(tǒng)一資源定位符URL (Web表單數(shù)據(jù)提交URL由FORM標(biāo)簽的 ACTION屬性指定)提交用戶輸入的Web表單數(shù)據(jù)時(shí),這個(gè)CSRF令牌也將隨Web表單數(shù)據(jù)一起提交;Web安全網(wǎng)關(guān)在接收到這個(gè)HTTP請(qǐng)求后,將驗(yàn)證這個(gè)CSRF令牌的有效性,只有驗(yàn)證通過(guò)才允許將該HTTP請(qǐng)求轉(zhuǎn)發(fā)給受保護(hù)的Web應(yīng)用系統(tǒng),由于這個(gè)CSRF令牌是必須提交并且無(wú)法事先預(yù)測(cè)的,因此,可以有效防止攻擊者通過(guò)自動(dòng)填充和提交表單來(lái)實(shí)現(xiàn)CSRF 攻擊;(2)圖形驗(yàn)證碼方法Web安全網(wǎng)關(guān)發(fā)現(xiàn)Web客戶端在請(qǐng)求一個(gè)包含Web表單的 Web頁(yè)面時(shí),將主動(dòng)修改由Web應(yīng)用系統(tǒng)返回給Web客戶端的這個(gè)包含Web表單的Web頁(yè)面,為Web表單添加一個(gè)圖形驗(yàn)證碼;當(dāng)Web客戶端通過(guò)另一個(gè)Web表單數(shù)據(jù)提交URL提交用戶輸入的Web表單數(shù)據(jù)時(shí),要求Web用戶必須正確輸入顯示在圖形上的由字符或數(shù)字組成的驗(yàn)證碼串(該驗(yàn)證碼串是隨機(jī)和不可事先預(yù)知的),這個(gè)驗(yàn)證碼串將隨Web表單數(shù)據(jù)一起提交;Web安全網(wǎng)關(guān)在接收到這個(gè)HTTP請(qǐng)求后,將驗(yàn)證用戶提交的圖形驗(yàn)證碼的有效性, 只有驗(yàn)證通過(guò)才允許將該HTTP請(qǐng)求轉(zhuǎn)發(fā)給受保護(hù)的Web應(yīng)用系統(tǒng),圖形驗(yàn)證碼方法不僅可以防止CSRF攻擊,還可以防止Web爬蟲的表單自動(dòng)填充攻擊。(3) Referer驗(yàn)證方法Web安全網(wǎng)關(guān)在接收到Web表單數(shù)據(jù)處理HTTP請(qǐng)求時(shí),將讀取該HTTP請(qǐng)求中的Ref erer值,只有當(dāng)Referer值為預(yù)先指定的URL時(shí),才允許將該HTTP 請(qǐng)求轉(zhuǎn)發(fā)給后臺(tái)受保護(hù)的Web應(yīng)用系統(tǒng)。上述前兩種在Wfeb安全網(wǎng)關(guān)上實(shí)施的傳統(tǒng)CSRF防御方法都可以有效的防御CSRF 攻擊,但是,它都要求Web安全網(wǎng)關(guān)實(shí)時(shí)修改由Web應(yīng)用系統(tǒng)返回給Web客戶端的Web頁(yè)面中的Web表單。Web完全網(wǎng)關(guān)要修S^feb頁(yè)面中的Web表單,則必須對(duì)Web頁(yè)面進(jìn)行 DOM(Document Object Model,文檔對(duì)象模型)樹分析、Web表單定位和Web表單修改等一列復(fù)雜操作,這些都將大大降低Web安全網(wǎng)關(guān)的性能。更為復(fù)雜的是,有些Web頁(yè)面中的Web 表單由客戶端腳本(比如Javascript)生成,要實(shí)現(xiàn)對(duì)這種類型Web表單的正確定位和修改則要求Web安全網(wǎng)關(guān)支持客戶端腳本解釋,因而是很難實(shí)現(xiàn)的。第三種Referer驗(yàn)證方法則存在攻擊者偽造Referer值而被繞過(guò)的風(fēng)險(xiǎn),因此只能作為一種輔助性的驗(yàn)證方法。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問(wèn)題是提供一種轉(zhuǎn)發(fā)HTTP請(qǐng)求的方法及裝置,可應(yīng)用在Web 安全網(wǎng)關(guān)上,無(wú)需對(duì)返回給Web客戶端的包含Web表單的Web頁(yè)面進(jìn)行修改,就能夠?qū)崿F(xiàn)對(duì)CSRF攻擊的有效防御,大大減輕Web安全網(wǎng)關(guān)的計(jì)算開銷。為了解決上述問(wèn)題,本發(fā)明提供了一種Web安全網(wǎng)關(guān)轉(zhuǎn)發(fā)HTTP請(qǐng)求的方法,包括判斷Web客戶端的HTTP請(qǐng)求的URL是否為Web表單請(qǐng)求URL或Web表單數(shù)據(jù)提交 URL;當(dāng)所述HTTP請(qǐng)求的URL為Web表單請(qǐng)求URL時(shí),如果該HTTP請(qǐng)求的URL參數(shù)中攜帶了有效的令牌,則轉(zhuǎn)發(fā)該HTTP請(qǐng)求;如果未攜帶令牌則隨機(jī)生成一個(gè)唯一的令牌,將所述HTTP請(qǐng)求的URL和生成的令牌拼接成新的URL,丟棄所述HTTP請(qǐng)求并向所述Web客戶端發(fā)送一個(gè)請(qǐng)求重定向到所述新的URL的HTTP響應(yīng)消息;當(dāng)所述HTTP請(qǐng)求的URL為Web表單數(shù)據(jù)提交URL時(shí),如果該HTTP請(qǐng)求存在 Referer值,并且從Referer中可以提取出有效的令牌,則轉(zhuǎn)發(fā)該HTTP請(qǐng)求。優(yōu)選地,所述Web表單請(qǐng)求URL是指包含Web表單的Web頁(yè)面所對(duì)應(yīng)的URL ;所述Web表單數(shù)據(jù)提交URL是指用來(lái)處理Web表單數(shù)據(jù)的動(dòng)態(tài)Web頁(yè)面所對(duì)應(yīng)的 URL。優(yōu)選地,所述的方法還包括當(dāng)Web客戶端的HTTP請(qǐng)求的URL為Web表單請(qǐng)求URL時(shí),如果URL參數(shù)攜帶了無(wú)效的令牌則報(bào)警;當(dāng)所述HTTP請(qǐng)求的URL為Web表單數(shù)據(jù)提交URL時(shí),如果該HTTP請(qǐng)求不存在 Referer,則丟棄該HTTP請(qǐng)求;如果該HTTP請(qǐng)求存在Referer,但從Referer中提取不出令牌則丟棄該HTTP請(qǐng)求;如果從Referer中提取出無(wú)效的令牌則丟棄該HTTP請(qǐng)求并報(bào)警。優(yōu)選地,所述隨機(jī)生成一個(gè)令牌的步驟后還包括保存該令牌的名字和值對(duì);所述令牌有效/無(wú)效是指所保存的令牌中,與所述令牌名字相同的令牌的值對(duì),與所述令牌的值對(duì)相同/ 不相同。優(yōu)選地,所述將HTTP請(qǐng)求的URL和令牌拼接成新的URL的步驟包括當(dāng)所述HTTP請(qǐng)求的URL包括參數(shù)時(shí),在該URL的參數(shù)串后追加一個(gè)或多個(gè)“&”字符后再附加上所述令牌的名字和值對(duì),得到新的URL ;當(dāng)所述HTTP請(qǐng)求的URL沒(méi)有包括參數(shù)時(shí),在該URL后追加一個(gè)或多個(gè)“ ? ”字符后,再附加上所述令牌的名字和值對(duì),得到新的URL ;當(dāng)Web客戶端的HTTP請(qǐng)求的URL為Web表單請(qǐng)求URL時(shí),所述轉(zhuǎn)發(fā)HTTP請(qǐng)求的步驟包括當(dāng)所述HTTP請(qǐng)求的URL參數(shù)中除了令牌名字和值對(duì)還存在其它URL參數(shù)時(shí),從該參數(shù)URL中刪除“&”字符以及其后的令牌的名字和值;當(dāng)所述HTTP請(qǐng)求的URL參數(shù)中只包含令牌名字和值對(duì)時(shí),從該URL參數(shù)中刪除 “? ”字符以及其后的令牌的名字和值;刪除后轉(zhuǎn)發(fā)所述HTTP請(qǐng)求。本發(fā)明還提供了一種轉(zhuǎn)發(fā)HTTP請(qǐng)求的裝置,包括HTTP請(qǐng)求分類單元,用于判斷Web客戶端的HTTP請(qǐng)求的URL是否為Web表單請(qǐng)求URL或Web表單數(shù)據(jù)提交URL ;Web表單請(qǐng)求處理單元,Web表單請(qǐng)求處理模塊,用于當(dāng)所述HTTP請(qǐng)求的URL為Web表單請(qǐng)求URL時(shí),如果該HTTP請(qǐng)求的URL參數(shù)中攜帶了有效的令牌,則轉(zhuǎn)發(fā)該HTTP請(qǐng)求;如果未攜帶令牌則隨機(jī)生成一個(gè)唯一的令牌,將所述HTTP請(qǐng)求的URL和生成的令牌拼接成新的URL,丟棄所述 HTTP請(qǐng)求并向所述Web客戶端發(fā)送一個(gè)請(qǐng)求重定向到所述新的URL的HTTP響應(yīng)消息;Web表單數(shù)據(jù)提交處理模塊,用于當(dāng)所述HTTP請(qǐng)求的URL為Web表單數(shù)據(jù)提交URL 時(shí),如果該HTTP請(qǐng)求存在Referer值,并且從Referer中可以提取出有效的令牌,則轉(zhuǎn)發(fā)該 HTTP請(qǐng)求。優(yōu)選地,所述HTTP請(qǐng)求分類單元將包含Web表單的Web頁(yè)面所對(duì)應(yīng)的URL判斷為所述Web表單請(qǐng)求URL ;將用來(lái)處理Web表單數(shù)據(jù)的動(dòng)態(tài)Web頁(yè)面所對(duì)應(yīng)的URL判斷為所述Web表單數(shù)據(jù)提交URL。優(yōu)選地,所述Web表單請(qǐng)求處理模塊包括第一判斷單元,用于當(dāng)所述HTTP請(qǐng)求的URL為Web表單請(qǐng)求URL時(shí),判斷該HTTP 請(qǐng)求的URL參數(shù)中是否攜帶了令牌;第一驗(yàn)證單元,用于當(dāng)URL參數(shù)攜帶了令牌時(shí)驗(yàn)證該令牌的有效性,如果有效則轉(zhuǎn)發(fā)該HTTP請(qǐng)求;如果無(wú)效則丟棄該HTTP請(qǐng)求并報(bào)警;令牌生成單元,用于當(dāng)URL參數(shù)未攜帶令牌時(shí)隨機(jī)生成一個(gè)唯一的令牌;重定向單元,用于將所述HTTP請(qǐng)求的URL和生成的令牌拼接成新的URL,丟棄所述 HTTP請(qǐng)求并向所述Web客戶端發(fā)送一個(gè)請(qǐng)求重定向到所述新的URL的HTTP響應(yīng)消息;所述Web表單數(shù)據(jù)提交處理模塊包括第二判斷單元,用于當(dāng)所述HTTP請(qǐng)求的URL為Web表單數(shù)據(jù)提交URL時(shí),判斷所述HTTP請(qǐng)求的Referer值是否存在;如果Referer不存在則丟棄該HTTP請(qǐng)求;令牌提取單元,用于當(dāng)Referer存在時(shí)從Referer中提取令牌,如果提取不出令牌則丟棄該HTTP請(qǐng)求;第二驗(yàn)證單元,用于當(dāng)從Referer中提取出令牌時(shí)驗(yàn)證該令牌的有效性,如果有效則轉(zhuǎn)發(fā)該HTTP請(qǐng)求;如果無(wú)效則報(bào)警。優(yōu)選地,所述令牌生成單元隨機(jī)生成一個(gè)令牌后還用于保存該令牌的名字和值;所述第一 /第二驗(yàn)證單元驗(yàn)證令牌的有效性是指所述第一 /第二驗(yàn)證單元在所保存的令牌中,找到與所要驗(yàn)證的令牌的名字相同的令牌;判斷所找到的令牌的值與要驗(yàn)證的令牌的值是否相等;相等則該令牌有效,不相等則該令牌無(wú)效。優(yōu)選地,所述重定向單元將HTTP請(qǐng)求的URL和令牌拼接成新的URL是指所述重定向單元當(dāng)所述HTTP請(qǐng)求的URL包括參數(shù)時(shí),在該URL的參數(shù)串后追加一個(gè)或多個(gè)“&”字符后再附加上所述令牌的名字和值對(duì),得到新的URL;當(dāng)所述HTTP請(qǐng)求的 URL沒(méi)有包括參數(shù)時(shí),在該URL后追加一個(gè)或多個(gè)“ ? ”字符后,再附加上所述令牌的名字和值對(duì),得到新的URL; 所述第一驗(yàn)證單元轉(zhuǎn)發(fā)HTTP請(qǐng)求是指 所述第一驗(yàn)證單元當(dāng)所述HTTP請(qǐng)求的URL參數(shù)中除了令牌名字和值對(duì)還存在其它URL參數(shù)時(shí),從該參數(shù)URL中刪除“&”字符以及其后的令牌的名字和值;當(dāng)所述HTTP請(qǐng)求的URL參數(shù)中只包含令牌名字和值對(duì)時(shí),從該URL參數(shù)中刪除“ ?,,字符以及其后的令牌的名字和值;刪除后轉(zhuǎn)發(fā)所述HTTP請(qǐng)求。本發(fā)明的技術(shù)方案中,Web安全網(wǎng)關(guān)僅需對(duì)Web表單請(qǐng)求URL追加CSRF令牌和進(jìn)行重定向,并不需要對(duì)返回的Web頁(yè)面進(jìn)行修改來(lái)插入CSRF令牌,因此,這將極大地減輕 Web安全網(wǎng)關(guān)的計(jì)算開銷;由于無(wú)需對(duì)返回的Web頁(yè)面進(jìn)行修改,因此,支持對(duì)由客戶端腳本生成的Web表單進(jìn)行CSRF防御;且CSRF防御由Web安全網(wǎng)關(guān)獨(dú)立完成,無(wú)需Web服務(wù)器的參與,因此易于部署。與傳統(tǒng)的CSRF防御方案相比,既可以減輕Web安全網(wǎng)關(guān)的計(jì)算壓力,同時(shí)也可實(shí)現(xiàn)為Web應(yīng)用系統(tǒng)中的所有Web表單提供全面的CSRF攻擊保護(hù)。
圖1為跨站請(qǐng)求偽造攻擊原理圖;圖2為實(shí)施例一中的Web安全網(wǎng)關(guān)的位置示意圖;圖3為實(shí)施例一的一個(gè)例子的流程示意圖;圖4為實(shí)施例二的轉(zhuǎn)發(fā)HTTP請(qǐng)求的裝置的示意框圖。
具體實(shí)施例方式下面將結(jié)合附圖及實(shí)施例對(duì)本發(fā)明的技術(shù)方案進(jìn)行更詳細(xì)的說(shuō)明。需要說(shuō)明的是,如果不沖突,本發(fā)明實(shí)施例以及實(shí)施例中的各個(gè)特征可以相互結(jié)合,均在本發(fā)明的保護(hù)范圍之內(nèi)。另外,在附圖的流程圖示出的步驟可以在諸如一組計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。為方便起見(jiàn),本文稱包含Web表單的Web頁(yè)面所對(duì)應(yīng)的URL為Web表單請(qǐng)求URL, 稱用來(lái)處理Web表單數(shù)據(jù)的動(dòng)態(tài)Web頁(yè)面所對(duì)應(yīng)的URL為Web表單數(shù)據(jù)提交URL,Web表單數(shù)據(jù)提交URL通常由FORM標(biāo)簽的ACTION屬性指定,也不排除由其它方式指定。實(shí)施例一,一種轉(zhuǎn)發(fā)HTTP請(qǐng)求的方法,可應(yīng)用在Web安全網(wǎng)關(guān)上,包括判斷Web客戶端的HTTP請(qǐng)求的URL是否為Web表單請(qǐng)求URL或Web表單數(shù)據(jù)提交 URL;當(dāng)所述HTTP請(qǐng)求的URL為Web表單請(qǐng)求URL時(shí),如果該HTTP請(qǐng)求的URL參數(shù)中攜帶了有效的令牌,則轉(zhuǎn)發(fā)該HTTP請(qǐng)求;如果未攜帶令牌則隨機(jī)生成一個(gè)唯一的令牌,將所述HTTP請(qǐng)求的URL和生成的令牌拼接成新的URL,丟棄所述HTTP請(qǐng)求并向所述Web客戶端發(fā)送一個(gè)請(qǐng)求重定向到所述新的URL的HTTP響應(yīng)消息;當(dāng)所述HTTP請(qǐng)求的URL為Web表單數(shù)據(jù)提交URL時(shí),如果該HTTP請(qǐng)求存在 Referer值,并且從Referer中可以提取出有效的令牌,則轉(zhuǎn)發(fā)該HTTP請(qǐng)求。本實(shí)施例中,所述方法還可以包括當(dāng)Web客戶端的HTTP請(qǐng)求的URL為Web表單請(qǐng)求URL時(shí),如果URL參數(shù)攜帶了無(wú)效的令牌則丟棄該HTTP請(qǐng)求并報(bào)警。本實(shí)施例中,所述方法還可以包括當(dāng)所述HTTP請(qǐng)求的URL為Web表單數(shù)據(jù)提交URL時(shí),如果該HTTP請(qǐng)求不存在Referer,則丟棄該HTTP請(qǐng)求;如果該HTTP請(qǐng)求存在Referer,但從Referer中提取不出令牌則丟棄該HTTP請(qǐng)求;如果從Referer中提取出無(wú)效的令牌則丟棄該HTTP請(qǐng)求并報(bào)警。 本實(shí)施例中,如果客戶端的HTTP請(qǐng)求的URL既不是Web表單請(qǐng)求URL,也不是Web 表單數(shù)據(jù)提交URL,則可以直接轉(zhuǎn)發(fā)。本實(shí)施例中,隨機(jī)生成的令牌是不可預(yù)測(cè)的,“唯一”是指該令牌的名在該安全網(wǎng)關(guān)是唯一的;采用重定向方法將該隨機(jī)的令牌附加到了 Web表單請(qǐng)求URL上,Web用戶填寫完Web表單,并通過(guò)Web表單數(shù)據(jù)提交URL提交所輸入的Web表單數(shù)據(jù)時(shí),附加在Web表單請(qǐng)求URL上的令牌將隨所述HTTP請(qǐng)求的Referer變量返回給Web安全網(wǎng)關(guān),Web安全網(wǎng)關(guān)通過(guò)驗(yàn)證Referer中攜帶的令牌的有效性來(lái)驗(yàn)證該HTTP請(qǐng)求的合法性。本實(shí)施例中,所述隨機(jī)生成一個(gè)唯一的令牌的步驟中還可以包括保存該令牌的名字和值對(duì);本實(shí)施例中,所述令牌有效/無(wú)效具體可以是指所保存的令牌中,與所述令牌名字相同的令牌的值對(duì),與所述令牌的值對(duì)相同/ 不相同。本實(shí)施例中,所述將HTTP請(qǐng)求的URL和令牌拼接成新的URL的步驟具體可以包括當(dāng)所述HTTP請(qǐng)求的URL包括參數(shù)時(shí),在該URL的參數(shù)串后追加一個(gè)或多個(gè)“&”字符后再附加上所述令牌的名字和值對(duì),得到新的URL ;當(dāng)所述HTTP請(qǐng)求的URL沒(méi)有包括參數(shù)時(shí),在該URL后追加一個(gè)或多個(gè)“ ? ”字符后,再附加上所述令牌的名字和值對(duì),得到新的URL。本實(shí)施例中,所述向Web客戶端發(fā)送一個(gè)重定向請(qǐng)求到所述新URL的HTTP響應(yīng)消息的步驟具體可以包括向Web客戶端發(fā)送一個(gè)狀態(tài)碼為302的表示目標(biāo)文件臨時(shí)移除的狀態(tài)響應(yīng)碼,并將新的URL值放置在HTTP響應(yīng)消息的Location參數(shù)變量中。本實(shí)施例中,當(dāng)Web客戶端的HTTP請(qǐng)求的URL為Web表單請(qǐng)求URL時(shí),所述轉(zhuǎn)發(fā) HTTP請(qǐng)求的步驟具體可以包括當(dāng)所述HTTP請(qǐng)求的URL參數(shù)中除了令牌名字和值對(duì)還存在其它URL參數(shù)時(shí),從該參數(shù)URL中刪除“&”字符以及其后的令牌的名字和值;當(dāng)所述HTTP請(qǐng)求的URL參數(shù)中只包含令牌名字和值對(duì)時(shí),從該URL參數(shù)中刪除 “? ”字符以及其后的令牌的名字和值;刪除后轉(zhuǎn)發(fā)所述HTTP請(qǐng)求。實(shí)際應(yīng)用時(shí)也可以不刪除。如圖2所示,本實(shí)施例的Web安全網(wǎng)關(guān)位于Web客戶端和受保護(hù)的Web應(yīng)用系統(tǒng)之間。所述Web客戶端可運(yùn)行標(biāo)準(zhǔn)Web瀏覽器程序(包括微軟IE瀏覽器、谷歌Chrome瀏覽器或者M(jìn)ozilliFireFox瀏覽器等),它通過(guò)HTTP協(xié)議與受保護(hù)的Web應(yīng)用系統(tǒng)進(jìn)行通信。Web客戶端與受保護(hù)的Web應(yīng)用系統(tǒng)之間的通信都通過(guò)Web安全網(wǎng)關(guān)進(jìn)行轉(zhuǎn)發(fā)。Web 安全網(wǎng)關(guān)轉(zhuǎn)發(fā)來(lái)自Web客戶端的HTTP請(qǐng)求,并可以直接對(duì)HTTP請(qǐng)求進(jìn)行重定向;此外,Web安全網(wǎng)關(guān)轉(zhuǎn)發(fā)來(lái)自受保護(hù)Web應(yīng)用系統(tǒng)的HTTP響應(yīng)消息,并可以在轉(zhuǎn)發(fā)HTTP響應(yīng)消息時(shí)對(duì)返回給Web客戶端的Web頁(yè)面進(jìn)行修改。目前,所有標(biāo)準(zhǔn)Web瀏覽器都支持對(duì)HTTP重定向請(qǐng)求的處理。圖3為本實(shí)施例的一個(gè)具體例子,包括以下幾個(gè)步驟301、Web安全網(wǎng)關(guān)接收來(lái)自Web客戶端的HTTP請(qǐng)求消息Web安全網(wǎng)關(guān)如果實(shí)現(xiàn)為反向Web代理,則直接在應(yīng)用層獲取轉(zhuǎn)發(fā)給受保護(hù)Web應(yīng)用系統(tǒng)的HTTP請(qǐng)求;如果Web 安全網(wǎng)關(guān)實(shí)現(xiàn)為網(wǎng)絡(luò)層端口轉(zhuǎn)發(fā)機(jī)制,則需要執(zhí)行流重組和HTTP協(xié)議解析,從而獲得轉(zhuǎn)發(fā)給受保護(hù)Web應(yīng)用系統(tǒng)的HTTP請(qǐng)求消息。302,Web安全網(wǎng)關(guān)根據(jù)HTTP請(qǐng)求的URL類別不同進(jìn)行相應(yīng)處理如果所述HTTP 請(qǐng)求的URL為Web表單請(qǐng)求URL,則執(zhí)行步驟303 ;如果所述HTTP請(qǐng)求的URL為Web表單數(shù)據(jù)提交URL,則執(zhí)行步驟304 ;如果所述HTTP請(qǐng)求的URL不屬于上述兩類則直接轉(zhuǎn)發(fā)該HTTP 請(qǐng)求后結(jié)束;303、檢查當(dāng)前HTTP請(qǐng)求的URL參數(shù)中是否攜帶由Web安全網(wǎng)關(guān)先前生成的令牌 如果攜帶令牌并且驗(yàn)證有效,則將URL參數(shù)中的令牌刪除后轉(zhuǎn)發(fā)該HTTP請(qǐng)求后結(jié)束;如果沒(méi)攜帶令牌則由Web安全網(wǎng)關(guān)生成一個(gè)隨機(jī)且不可預(yù)測(cè)的令牌,然后將當(dāng)前HTTP請(qǐng)求的URL和所生成的令牌進(jìn)行拼接成新的URL,最后丟棄該HTTP請(qǐng)求并向Web客戶端發(fā)送一個(gè)請(qǐng)求重定向到所述新的URL的HTTP響應(yīng)消息后結(jié)束;如果令牌驗(yàn)證無(wú)效還可以丟棄該 HTTP請(qǐng)求并報(bào)警,結(jié)束;304、檢查當(dāng)前HTTP請(qǐng)求的Referer值如果Referer存在且從Referer中提取出的令牌經(jīng)驗(yàn)證有效,則轉(zhuǎn)發(fā)該HTTP請(qǐng)求后結(jié)束;如果Referer不存在,或Referer中提取不出令牌則丟棄該HTTP請(qǐng)求并結(jié)束;如果令牌驗(yàn)證無(wú)效,則報(bào)警并結(jié)束。下面再用兩個(gè)具體的例子進(jìn)行說(shuō)明。例子二,假設(shè)受保護(hù)的Web應(yīng)用系統(tǒng)為一個(gè)網(wǎng)銀系統(tǒng),其域名為誦.bank, com,它允許用戶在登錄成功后在線進(jìn)行資金轉(zhuǎn)賬操作。假設(shè)用戶登錄成功后,網(wǎng)銀系統(tǒng)為用戶分配一個(gè)唯一的、不可猜測(cè)的會(huì)話ID憑證,該會(huì)話ID憑證基于Cookie技術(shù)保存在Web客戶端;用戶登錄成功后,網(wǎng)銀系統(tǒng)在進(jìn)行敏感操作時(shí),需要驗(yàn)證Web客戶端發(fā)送來(lái)的cookie中的會(huì)話ID憑證的有效性來(lái)驗(yàn)證用戶是否登錄成功。假設(shè)該網(wǎng)銀系統(tǒng)的資金轉(zhuǎn)賬頁(yè)面所對(duì)應(yīng)的URL為"Transf erforrn. html, Transferform. html中用來(lái)填寫資金轉(zhuǎn)賬信息的Web表單所對(duì)應(yīng)的HTML代碼如下所示<form action = post action =,,/ExecTransfer. cgi,,><input type = text name =,,Amount,,size = 20><input type = text name =,,recipient,,size = 20><input type = submitXinput type = reset></form>這里,資金轉(zhuǎn)賬頁(yè)面所對(duì)應(yīng)的URL為Transferform. html,就是本文所述的Web表單請(qǐng)求URL。從上述HTML代碼可以看出,該網(wǎng)銀系統(tǒng)中用來(lái)處理資金轉(zhuǎn)賬操作的動(dòng)態(tài)Web 頁(yè)面所對(duì)應(yīng)的URL為ExecTransfer. cgi,就是本文所述的Web表單數(shù)據(jù)提交URL。由上面所述的HTML代碼可以看出,該網(wǎng)銀系統(tǒng)的資金轉(zhuǎn)賬Web表單存在CSRF漏洞,攻擊者很容易采用CSRF攻擊對(duì)該網(wǎng)銀系統(tǒng)進(jìn)行攻擊。
而采用了本實(shí)施例的方法后,將進(jìn)行如下操作,以防御CSRF攻擊。假設(shè)網(wǎng)銀客戶A成功登錄了該網(wǎng)銀系統(tǒng),所述網(wǎng)銀系統(tǒng)為客戶A生成了唯一的會(huì)話ID憑證,并通過(guò)在HTTP響應(yīng)消息頭部插入如下所示的kt-Cookie命令將會(huì)話ID憑證推送到Web客戶端Set-Cookie :SessionID :xxxx-yyyy-zzzz-mmmm0網(wǎng)銀客戶A打算進(jìn)行資金轉(zhuǎn)賬操作,于是點(diǎn)擊網(wǎng)銀系統(tǒng)上的資金轉(zhuǎn)賬超級(jí)鏈接。 此時(shí),Web客戶端將生成如下所示的請(qǐng)求資金轉(zhuǎn)賬表單的HTTP請(qǐng)求(后文簡(jiǎn)稱為第一 HTTP 請(qǐng)求)GET/TransferForm. html HTTP/1. 1HOST :www. bank, comACCEPT : text/html,*/*Cookie :SessionID :xxxx-yyyy-zzzz-mmmmReferer :http://www. bank, com/上述第一 HTTP請(qǐng)求將被Web安全網(wǎng)關(guān)截獲。Web安全網(wǎng)關(guān)依據(jù)預(yù)先設(shè)置的Web表單請(qǐng)求URL列表將該HTTP請(qǐng)求分類為Web表單請(qǐng)求URL。于是,Web安全網(wǎng)關(guān)試圖從該第一 HTTP請(qǐng)求的URL中提取CSRF令牌。由于該第一 HTTP請(qǐng)求的URL并不包含令牌,因此, Web安全網(wǎng)關(guān)將不得不為其生成一個(gè)新的、唯一的、不可預(yù)知的令牌,這里假設(shè)Web安全網(wǎng)關(guān)為該第一 HTTP請(qǐng)求生成的令牌為AAAA-BBBB-CCCC-DDDD。然后,Web安全網(wǎng)關(guān)基于該第一 HTTP請(qǐng)求的URL和新生成的令牌拼接成一個(gè)如下所示的新的URL (后文簡(jiǎn)稱為第一 URL)。/TransferForm. html ? CSRFToken = AAAA-BBBB-CCCC-DDDD新生成的CSRF令牌被放置在HTTP請(qǐng)求的URL的后面,并以問(wèn)號(hào)隔開,CSRFToken 為令牌的名字,令牌的值為AAAA-BBBB-CCCC-DDDD。注意,如果HTTP請(qǐng)求的URL后面已經(jīng)帶有URL參數(shù),則只需要在URL參數(shù)串后面追加一個(gè)參數(shù)即可。比如,如果原先的HTTP請(qǐng)求的URL為/transferform. cgi ? userid =123,則拼接出的新的URL如下所示。/transferform. cgi ? userid = 123&CSRFToken = AAAA-BBBB-CCCC-DDDD最后,Web安全網(wǎng)關(guān)丟棄第一 HTTP請(qǐng)求,然后,生成一個(gè)重定向到第一 URL的HTTP 響應(yīng)消息。所生成的HTTP響應(yīng)消息如下所示HTTP/1. 1302 Object MovedServer :Apache_xxxxLocation /TransferForm. html ? CSRFToken = AAAA-BBBB-CCCC-DDDDContent-Length :0網(wǎng)銀客戶A的Web客戶端接收到上述HTTP響應(yīng)消息后,將重新提交一個(gè)如下所示的新的HTTP請(qǐng)求(后文稱為第二 HTTP請(qǐng)求),該第二 HTTP請(qǐng)求的URL為上述Location中指定的URL。GET/TransferForm. html ? CSRFToken = AAAA-BBBB-CCCC-DDDD HTTP/1. 1HOST :www. bank, comACCEPT : text/html,*/*
Cookie :SessionID :xxxx-yyyy-zzzz-mmmmReferer :http://www. bank, com/第二 HTTP請(qǐng)求將再次被Web安全網(wǎng)關(guān)截獲。Web安全網(wǎng)關(guān)依據(jù)預(yù)先設(shè)置的Web表單請(qǐng)求URL列表將該HTTP請(qǐng)求分類為Web表單請(qǐng)求URL。于是,Web安全網(wǎng)關(guān)試圖從該第二 HTTP請(qǐng)求的URL中提取令牌。這次正確提取出的令牌值為AAAA-BBBB-CCCC-DDDD。Web 安全網(wǎng)關(guān)將該令牌值與本地存儲(chǔ)的CSRF令牌值比對(duì)后發(fā)現(xiàn)一致,于是將該第二 HTTP請(qǐng)求轉(zhuǎn)發(fā)給受保護(hù)Web應(yīng)用系統(tǒng)。受保護(hù)的Web應(yīng)用系統(tǒng)接收到第二 HTTP請(qǐng)求后,將驗(yàn)證該用戶的身份以及鑒別其權(quán)限,驗(yàn)證通過(guò)后,將向Web客戶端返回一個(gè)HTTP響應(yīng)消息,該HTTP響應(yīng)消息中包含所述資金轉(zhuǎn)賬Web表單。包含所述資金轉(zhuǎn)賬Web表單的HTTP響應(yīng)消息將被Web安全網(wǎng)關(guān)不加修改的轉(zhuǎn)發(fā)給Web客戶端,這一點(diǎn)完全不同于實(shí)現(xiàn)于Web安全網(wǎng)關(guān)上的傳統(tǒng)CSRF防御方法。Web客戶端呈現(xiàn)在接收到包含所述資金轉(zhuǎn)賬Web表單的HTTP響應(yīng)消息后將為網(wǎng)銀客戶A呈現(xiàn)給資金轉(zhuǎn)賬表單。網(wǎng)銀客戶A填寫完該表單并點(diǎn)擊提交按鈕后,Web客戶端將生成如下所示的HTTP請(qǐng)求消息(后文稱為第三HTTP請(qǐng)求),所述第三HTTP請(qǐng)求消息的 URL為該資金轉(zhuǎn)賬Web表單所對(duì)應(yīng)的Web表單數(shù)據(jù)提交URL,即/ExecTransfer. Cgi0GET/ExecTransfer. cgi HTTP/1. 1HOST :www. bank, comACCEPT : text/html,*/*Cookie :SessionID :xxxx-yyyy-zzzz-mmmmReferer http ://www. bank. com//TransferForm. html ? CSRFTokeh = AAAA-BBBB-CCCC-DDDDContent-Length :30Amount = lOOOO&recipient = xiaoye由HTML規(guī)范可知,資金轉(zhuǎn)賬Web表單頁(yè)面所對(duì)應(yīng)的URL http://www.bank.eom//TransferForm.html ? CSRFTokeh = AAAA-BBBB-CCCC-DDDD,與資金轉(zhuǎn)賬Web表單數(shù)據(jù)提交URL http://www.bank. com/ExecTransfer. cgi 為直接鏈接跳轉(zhuǎn)關(guān)系,因此,標(biāo)準(zhǔn) Web 客戶端將自動(dòng)將第三HTTP請(qǐng)求的Referer值設(shè)置為第二 HTTP請(qǐng)求所對(duì)應(yīng)的完整URL。最后,第三HTTP請(qǐng)求將被Web安全網(wǎng)關(guān)截獲。Web安全網(wǎng)關(guān)依據(jù)預(yù)先設(shè)置的 Web表單數(shù)據(jù)提交URL列表將該第三HTTP請(qǐng)求分類為Web表單數(shù)據(jù)提交URL。于是,Web 安全網(wǎng)關(guān)試圖從該第三HTTP請(qǐng)求的Referer中提取令牌。這里正確提取出的令牌值為 AAAA-BBBB-CCCC-DDDD。Web安全網(wǎng)關(guān)將該令牌值與本地存儲(chǔ)的令牌值比對(duì)后發(fā)現(xiàn)一致,于是將該第三HTTP請(qǐng)求轉(zhuǎn)發(fā)給受保護(hù)Web應(yīng)用系統(tǒng)。最后,受保護(hù)Web應(yīng)用系統(tǒng)將正確處理該資金轉(zhuǎn)賬請(qǐng)求操作。例子三,與例子二非常類似,唯一不同的是,當(dāng)Web安全網(wǎng)關(guān)接收到第二 HTTP請(qǐng)求消息后,并驗(yàn)證了該第二 HTTP請(qǐng)求的URL中的令牌有效后,在轉(zhuǎn)發(fā)該第二 HTTP請(qǐng)求前,將第二 HTTP請(qǐng)求中的URL中的令牌名稱和值對(duì)刪除,從而使得受保護(hù)的Web應(yīng)用系統(tǒng)接收到的HTTP請(qǐng)求消息與未實(shí)施CSRF保護(hù)前看到的HTTP請(qǐng)求的數(shù)據(jù)一樣(第一 HTTP請(qǐng)求)。 將HTTP請(qǐng)求中的URL中的令牌名稱和值對(duì)刪除的好處是這可以使得Web安全網(wǎng)關(guān)上實(shí)施的CSRF防御機(jī)制對(duì)受保護(hù)的Web應(yīng)用系統(tǒng)完全透明。實(shí)施例二,一種轉(zhuǎn)發(fā)HTTP請(qǐng)求的裝置,可應(yīng)用在Web安全網(wǎng)關(guān)上,如圖4所示,包括HTTP請(qǐng)求分類模塊,用于判斷Web客戶端的HTTP請(qǐng)求的URL是否為Web表單請(qǐng)求 URL或Web表單數(shù)據(jù)提交URL ;Web表單請(qǐng)求處理模塊,用于當(dāng)所述HTTP請(qǐng)求的URL為Web表單請(qǐng)求URL時(shí),如果該HTTP請(qǐng)求的URL參數(shù)中攜帶了有效的令牌,則轉(zhuǎn)發(fā)該HTTP請(qǐng)求;如果未攜帶令牌則隨機(jī)生成一個(gè)唯一的令牌,將所述HTTP請(qǐng)求的URL和生成的令牌拼接成新的URL,丟棄所述 HTTP請(qǐng)求并向所述Web客戶端發(fā)送一個(gè)請(qǐng)求重定向到所述新的URL的HTTP響應(yīng)消息;Web表單數(shù)據(jù)提交處理模塊,用于當(dāng)所述HTTP請(qǐng)求的URL為Web表單數(shù)據(jù)提交URL 時(shí),如果該HTTP請(qǐng)求存在Referer值,并且從Referer中可以提取出有效的令牌,則轉(zhuǎn)發(fā)該 HTTP請(qǐng)求。本實(shí)施例中,所述Web表單請(qǐng)求處理模塊具體可以包括第一判斷單元,用于當(dāng)所述HTTP請(qǐng)求的URL為Web表單請(qǐng)求URL時(shí),判斷該HTTP 請(qǐng)求的URL參數(shù)中是否攜帶了令牌;第一驗(yàn)證單元,用于當(dāng)URL參數(shù)攜帶了令牌時(shí)驗(yàn)證該令牌的有效性,如果有效則轉(zhuǎn)發(fā)該HTTP請(qǐng)求;如果無(wú)效則報(bào)警;令牌生成單元,用于當(dāng)URL參數(shù)未攜帶令牌時(shí)隨機(jī)生成一個(gè)唯一的令牌;重定向單元,用于將所述HTTP請(qǐng)求的URL和生成的令牌拼接成新的URL,丟棄所述 HTTP請(qǐng)求并向所述Web客戶端發(fā)送一個(gè)請(qǐng)求重定向到所述新的URL的HTTP響應(yīng)消息。本實(shí)施例中,所述Web表單數(shù)據(jù)提交處理模塊具體可以包括第二判斷單元,用于當(dāng)所述HTTP請(qǐng)求的URL為Web表單數(shù)據(jù)提交URL時(shí),判斷所述HTTP請(qǐng)求的Referer值是否存在;如果Referer不存在則丟棄該HTTP請(qǐng)求;令牌提取單元,用于當(dāng)Referer存在時(shí)從Referer中提取令牌,如果提取不出令牌則丟棄該HTTP請(qǐng)求;第二驗(yàn)證單元,用于當(dāng)從Referer中提取出令牌時(shí)驗(yàn)證該令牌的有效性,如果有效則轉(zhuǎn)發(fā)該HTTP請(qǐng)求;如果無(wú)效則報(bào)警。本實(shí)施例中,所述HTTP請(qǐng)求分類單元當(dāng)客戶端的HTTP請(qǐng)求的URL既不是Web表單請(qǐng)求URL,也不是Web表單數(shù)據(jù)提交URL時(shí)可以直接轉(zhuǎn)發(fā)。本實(shí)施例中,所述令牌生成單元隨機(jī)生成一個(gè)令牌后還可以用于保存該令牌的名字和值。本實(shí)施例中,所述第一 /第二驗(yàn)證單元驗(yàn)證令牌的有效性具體可以是指所述第一 /第二驗(yàn)證單元在所保存的令牌中,找到與所要驗(yàn)證的令牌的名字相同的令牌;判斷所找到的令牌的值對(duì)與要驗(yàn)證的令牌的值對(duì)是否相同;相同則該令牌有效, 不相同則該令牌無(wú)效。本實(shí)施例中,所述重定向單元將HTTP請(qǐng)求的URL和令牌拼接成新的URL具體可以是指
所述重定向單元當(dāng)所述HTTP請(qǐng)求的URL包括參數(shù)時(shí),在該URL的參數(shù)串后追加一個(gè)或多個(gè)“&”字符后再附加上所述令牌的名字和值對(duì),得到新的URL;當(dāng)所述HTTP請(qǐng)求的 URL沒(méi)有包括參數(shù)時(shí),在該URL后追加一個(gè)或多個(gè)“ ? ”字符后,再附加上所述令牌的名字和值對(duì),得到新的URL。本實(shí)施例中,所述重定向單元向Web客戶端發(fā)送一個(gè)重定向請(qǐng)求到所述新URL的 HTTP響應(yīng)消息具體可以是指所述重定向單元向Web客戶端發(fā)送一個(gè)狀態(tài)碼為302的表示目標(biāo)文件臨時(shí)移除的狀態(tài)響應(yīng)碼,并將新的URL值放置在HTTP響應(yīng)消息的Location參數(shù)變量中。本實(shí)施例中,所述第一驗(yàn)證單元轉(zhuǎn)發(fā)HTTP請(qǐng)求具體可以是指所述第一驗(yàn)證單元當(dāng)所述HTTP請(qǐng)求的URL參數(shù)中除了令牌名字和值對(duì)還存在其它URL參數(shù)時(shí),從該參數(shù)URL中刪除“&”字符以及其后的令牌的名字和值;當(dāng)所述HTTP請(qǐng)求的URL參數(shù)中只包含令牌名字和值對(duì)時(shí),從該URL參數(shù)中刪除“ ?,,字符以及其后的令牌的名字和值;刪除后轉(zhuǎn)發(fā)所述HTTP請(qǐng)求。其它實(shí)現(xiàn)細(xì)節(jié)可以同實(shí)施例一。本領(lǐng)域普通技術(shù)人員可以理解上述方法中的全部或部分步驟可通過(guò)程序來(lái)指令相關(guān)硬件完成,所述程序可以存儲(chǔ)于計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,如只讀存儲(chǔ)器、磁盤或光盤等??蛇x地,上述實(shí)施例的全部或部分步驟也可以使用一個(gè)或多個(gè)集成電路來(lái)實(shí)現(xiàn)。相應(yīng)地,上述實(shí)施例中的各模塊/單元可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能模塊的形式實(shí)現(xiàn)。本發(fā)明不限制于任何特定形式的硬件和軟件的結(jié)合。當(dāng)然,本發(fā)明還可有其他多種實(shí)施例,在不背離本發(fā)明精神及其實(shí)質(zhì)的情況下,熟悉本領(lǐng)域的技術(shù)人員當(dāng)可根據(jù)本發(fā)明作出各種相應(yīng)的改變和變形,但這些相應(yīng)的改變和變形都應(yīng)屬于本發(fā)明的權(quán)利要求的保護(hù)范圍。
權(quán)利要求
1.一種Web安全網(wǎng)關(guān)轉(zhuǎn)發(fā)HTTP請(qǐng)求的方法,包括判斷Web客戶端的HTTP請(qǐng)求的URL是否為Web表單請(qǐng)求URL或Web表單數(shù)據(jù)提交URL ; 當(dāng)所述HTTP請(qǐng)求的URL為Web表單請(qǐng)求URL時(shí),如果該HTTP請(qǐng)求的URL參數(shù)中攜帶了有效的令牌,則轉(zhuǎn)發(fā)該HTTP請(qǐng)求;如果未攜帶令牌則隨機(jī)生成一個(gè)唯一的令牌,將所述 HTTP請(qǐng)求的URL和生成的令牌拼接成新的URL,丟棄所述HTTP請(qǐng)求并向所述Web客戶端發(fā)送一個(gè)請(qǐng)求重定向到所述新的URL的HTTP響應(yīng)消息;當(dāng)所述HTTP請(qǐng)求的URL為Web表單數(shù)據(jù)提交URL時(shí),如果該HTTP請(qǐng)求存在Referer 值,并且從Referer中可以提取出有效的令牌,則轉(zhuǎn)發(fā)該HTTP請(qǐng)求。
2.如權(quán)利要求1所述的方法,其特征在于所述Web表單請(qǐng)求URL是指包含Web表單的Web頁(yè)面所對(duì)應(yīng)的URL ;所述Web表單數(shù)據(jù)提交URL是指用來(lái)處理Web表單數(shù)據(jù)的動(dòng)態(tài)Web頁(yè)面所對(duì)應(yīng)的URL。
3.如權(quán)利要求1所述的方法,其特征在于,還包括當(dāng)Web客戶端的HTTP請(qǐng)求的URL為Web表單請(qǐng)求URL時(shí),如果URL參數(shù)攜帶了無(wú)效的令牌則報(bào)警;當(dāng)所述HTTP請(qǐng)求的URL為Web表單數(shù)據(jù)提交URL時(shí),如果該HTTP請(qǐng)求不存在Referer, 則丟棄該HTTP請(qǐng)求;如果該HTTP請(qǐng)求存在Referer,但從Referer中提取不出令牌則丟棄該HTTP請(qǐng)求;如果從Referer中提取出無(wú)效的令牌則丟棄該HTTP請(qǐng)求并報(bào)警。
4.如權(quán)利要求3所述的方法,其特征在于,所述隨機(jī)生成一個(gè)令牌的步驟后還包括 保存該令牌的名字和值對(duì);所述令牌有效/無(wú)效是指所保存的令牌中,與所述令牌名字相同的令牌的值對(duì),與所述令牌的值對(duì)相同/不相同。
5.如權(quán)利要求1到4中任一項(xiàng)所述的方法,其特征在于,所述將HTTP請(qǐng)求的URL和令牌拼接成新的URL的步驟包括當(dāng)所述HTTP請(qǐng)求的URL包括參數(shù)時(shí),在該URL的參數(shù)串后追加一個(gè)或多個(gè)“&”字符后再附加上所述令牌的名字和值對(duì),得到新的URL ;當(dāng)所述HTTP請(qǐng)求的URL沒(méi)有包括參數(shù)時(shí),在該URL后追加一個(gè)或多個(gè)“ ?,,字符后,再附加上所述令牌的名字和值對(duì),得到新的URL ;當(dāng)Web客戶端的HTTP請(qǐng)求的URL為Web表單請(qǐng)求URL時(shí),所述轉(zhuǎn)發(fā)HTTP請(qǐng)求的步驟包括當(dāng)所述HTTP請(qǐng)求的URL參數(shù)中除了令牌名字和值對(duì)還存在其它URL參數(shù)時(shí),從該參數(shù) URL中刪除“&”字符以及其后的令牌的名字和值;當(dāng)所述HTTP請(qǐng)求的URL參數(shù)中只包含令牌名字和值對(duì)時(shí),從該URL參數(shù)中刪除“ ? ”字符以及其后的令牌的名字和值; 刪除后轉(zhuǎn)發(fā)所述HTTP請(qǐng)求。
6.一種轉(zhuǎn)發(fā)HTTP請(qǐng)求的裝置,其特征在于,包括HTTP請(qǐng)求分類單元,用于判斷Web客戶端的HTTP請(qǐng)求的URL是否為Web表單請(qǐng)求URL 或Web表單數(shù)據(jù)提交URL ; Web表單請(qǐng)求處理單元,Web表單請(qǐng)求處理模塊,用于當(dāng)所述HTTP請(qǐng)求的URL為Web表單請(qǐng)求URL時(shí),如果該 HTTP請(qǐng)求的URL參數(shù)中攜帶了有效的令牌,則轉(zhuǎn)發(fā)該HTTP請(qǐng)求;如果未攜帶令牌則隨機(jī)生成一個(gè)唯一的令牌,將所述HTTP請(qǐng)求的URL和生成的令牌拼接成新的URL,丟棄所述HTTP 請(qǐng)求并向所述Web客戶端發(fā)送一個(gè)請(qǐng)求重定向到所述新的URL的HTTP響應(yīng)消息;Web表單數(shù)據(jù)提交處理模塊,用于當(dāng)所述HTTP請(qǐng)求的URL為Web表單數(shù)據(jù)提交URL 時(shí),如果該HTTP請(qǐng)求存在Referer值,并且從Referer中可以提取出有效的令牌,則轉(zhuǎn)發(fā)該 HTTP請(qǐng)求。
7.如權(quán)利要求6所述的裝置,其特征在于所述HTTP請(qǐng)求分類單元將包含Web表單的Web頁(yè)面所對(duì)應(yīng)的URL判斷為所述Web表單請(qǐng)求URL ;將用來(lái)處理Web表單數(shù)據(jù)的動(dòng)態(tài)Web頁(yè)面所對(duì)應(yīng)的URL判斷為所述Web表單數(shù)據(jù)提交URL。
8.如權(quán)利要求6所述的裝置,其特征在于,所述Web表單請(qǐng)求處理模塊包括 第一判斷單元,用于當(dāng)所述HTTP請(qǐng)求的URL為Web表單請(qǐng)求URL時(shí),判斷該HTTP請(qǐng)求的URL參數(shù)中是否攜帶了令牌;第一驗(yàn)證單元,用于當(dāng)URL參數(shù)攜帶了令牌時(shí)驗(yàn)證該令牌的有效性,如果有效則轉(zhuǎn)發(fā)該HTTP請(qǐng)求;如果無(wú)效則丟棄該HTTP請(qǐng)求并報(bào)警;令牌生成單元,用于當(dāng)URL參數(shù)未攜帶令牌時(shí)隨機(jī)生成一個(gè)唯一的令牌; 重定向單元,用于將所述HTTP請(qǐng)求的URL和生成的令牌拼接成新的URL,丟棄所述 HTTP請(qǐng)求并向所述Web客戶端發(fā)送一個(gè)請(qǐng)求重定向到所述新的URL的HTTP響應(yīng)消息; 所述Web表單數(shù)據(jù)提交處理模塊包括第二判斷單元,用于當(dāng)所述HTTP請(qǐng)求的URL為Web表單數(shù)據(jù)提交URL時(shí),判斷所述HTTP 請(qǐng)求的Referer值是否存在;如果Referer不存在則丟棄該HTTP請(qǐng)求;令牌提取單元,用于當(dāng)Referer存在時(shí)從Referer中提取令牌,如果提取不出令牌則丟棄該HTTP請(qǐng)求;第二驗(yàn)證單元,用于當(dāng)從Referer中提取出令牌時(shí)驗(yàn)證該令牌的有效性,如果有效則轉(zhuǎn)發(fā)該HTTP請(qǐng)求;如果無(wú)效則報(bào)警。
9.如權(quán)利要求8所述的裝置,其特征在于所述令牌生成單元隨機(jī)生成一個(gè)令牌后還用于保存該令牌的名字和值; 所述第一/第二驗(yàn)證單元驗(yàn)證令牌的有效性是指所述第一 /第二驗(yàn)證單元在所保存的令牌中,找到與所要驗(yàn)證的令牌的名字相同的令牌;判斷所找到的令牌的值與要驗(yàn)證的令牌的值是否相等;相等則該令牌有效,不相等則該令牌無(wú)效。
10.如權(quán)利要求6到9中任一項(xiàng)所述的裝置,其特征在于,所述重定向單元將HTTP請(qǐng)求的URL和令牌拼接成新的URL是指所述重定向單元當(dāng)所述HTTP請(qǐng)求的URL包括參數(shù)時(shí),在該URL的參數(shù)串后追加一個(gè)或多個(gè)“&”字符后再附加上所述令牌的名字和值對(duì),得到新的URL ;當(dāng)所述HTTP請(qǐng)求的URL沒(méi)有包括參數(shù)時(shí),在該URL后追加一個(gè)或多個(gè)“ ?,,字符后,再附加上所述令牌的名字和值對(duì), 得到新的URL ;所述第一驗(yàn)證單元轉(zhuǎn)發(fā)HTTP請(qǐng)求是指所述第一驗(yàn)證單元當(dāng)所述HTTP請(qǐng)求的URL參數(shù)中除了令牌名字和值對(duì)還存在其它URL 參數(shù)時(shí),從該參數(shù)URL中刪除“&”字符以及其后的令牌的名字和值;當(dāng)所述HTTP請(qǐng)求的URL 參數(shù)中只包含令牌名字和值對(duì)時(shí),從該URL參數(shù)中刪除“ ?”字符以及其后的令牌的名字和值;刪除后轉(zhuǎn)發(fā)所述HTTP請(qǐng)求。
全文摘要
一種轉(zhuǎn)發(fā)HTTP請(qǐng)求的方法及裝置;方法包括判斷Web客戶端的HTTP請(qǐng)求的URL是否為Web表單請(qǐng)求URL或Web表單數(shù)據(jù)提交URL;當(dāng)所述HTTP請(qǐng)求的URL為Web表單請(qǐng)求URL時(shí),如果該HTTP請(qǐng)求的URL參數(shù)中攜帶了有效的令牌,則轉(zhuǎn)發(fā)該HTTP請(qǐng)求;如果未攜帶令牌則隨機(jī)生成一個(gè)唯一的令牌,將所述HTTP請(qǐng)求的URL和生成的令牌拼接成新的URL,丟棄所述HTTP請(qǐng)求并向所述Web客戶端發(fā)送一個(gè)請(qǐng)求重定向到所述新的URL的HTTP響應(yīng)消息;當(dāng)所述HTTP請(qǐng)求的URL為Web表單數(shù)據(jù)提交URL時(shí),如果該HTTP請(qǐng)求存在Referer值,并且從Referer中可以提取出有效的令牌,則轉(zhuǎn)發(fā)該HTTP請(qǐng)求。本發(fā)明能夠?qū)崿F(xiàn)對(duì)CSRF攻擊的有效防御,大大減輕Web安全網(wǎng)關(guān)的計(jì)算開銷。
文檔編號(hào)H04L29/06GK102571846SQ20101060336
公開日2012年7月11日 申請(qǐng)日期2010年12月23日 優(yōu)先權(quán)日2010年12月23日
發(fā)明者葉潤(rùn)國(guó), 胡振宇 申請(qǐng)人:北京啟明星辰信息安全技術(shù)有限公司, 北京啟明星辰信息技術(shù)股份有限公司