專利名稱:一種用于防止csrf攻擊的方法和設(shè)備的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)安全,更具體地,本發(fā)明涉及一種用于防止網(wǎng)絡(luò)攻擊的方法和設(shè)備。
背景技術(shù):
隨著互聯(lián)網(wǎng)應(yīng)用的越來越廣泛,互聯(lián)網(wǎng)安全問題成了人們?nèi)找骊P(guān)注的問題。在現(xiàn)有的多種威脅網(wǎng)絡(luò)安全的攻擊方法中,跨站請(qǐng)求偽造(CSRF)攻擊是一種挾制終端用戶在當(dāng)前已登錄的Web應(yīng)用程序上執(zhí)行非本意的操作的攻擊方法。攻擊者只要借助少許的社會(huì)工程詭計(jì),例如通過電子郵件或者是聊天軟件發(fā)送的鏈接,攻擊者就能迫使一個(gè)Web應(yīng)用程序的用戶去執(zhí)行攻擊者選擇的操作。例如,如果用戶登錄網(wǎng)絡(luò)銀行去查看其存款余額, 他沒有退出網(wǎng)絡(luò)銀行系統(tǒng)就去了自己喜歡的論壇,如果攻擊者在論壇中精心構(gòu)造了一個(gè)惡意的鏈接并誘使該用戶點(diǎn)擊了該鏈接,那么該用戶在網(wǎng)絡(luò)銀行帳戶中的資金就有可能被轉(zhuǎn)移到攻擊者指定的帳戶中。當(dāng)CSRF針對(duì)普通用戶發(fā)動(dòng)攻擊時(shí),將對(duì)終端用戶的數(shù)據(jù)和操作指令構(gòu)成嚴(yán)重的威脅;當(dāng)受攻擊的終端用戶具有管理員帳戶的時(shí)候,CSRF攻擊將危及整個(gè) Web應(yīng)用程序,因而CSRF攻擊的危害性很大。針對(duì)CSRF攻擊,一種最安全的防止方法就是對(duì)現(xiàn)存的所有服務(wù)器進(jìn)行改造使其能夠防范CSRF攻擊。但這種做法明顯不切實(shí)際。針對(duì)現(xiàn)存的服務(wù)器,現(xiàn)有技術(shù)中存在的一些其他的解決方案也都不能有效地防止CSRF攻擊。因此,需要一種方法和設(shè)備能夠有效地防止CSRF攻擊。
發(fā)明內(nèi)容
本公開說明性實(shí)施例中認(rèn)識(shí)到現(xiàn)有技術(shù)中不能有效地防止CSRF攻擊的問題,提出了一種在不修改現(xiàn)有服務(wù)器的前提下能夠有效防止CSRF攻擊的方法和設(shè)備。根據(jù)本公開的一個(gè)實(shí)施例,提供了一種用于防止CSRF攻擊的設(shè)備,包括請(qǐng)求攔截模塊,用于攔截客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求;令牌生成模塊,用于生成令牌;響應(yīng)生成模塊,用于生成對(duì)請(qǐng)求的響應(yīng);令牌插入模塊,用于將令牌插入到對(duì)請(qǐng)求的響應(yīng)中;以及響應(yīng)發(fā)送模塊,用于向客戶端瀏覽器發(fā)送插入了令牌的對(duì)請(qǐng)求的響應(yīng)。根據(jù)本公開的一個(gè)實(shí)施例,提供了一種用于防止CSRF攻擊的設(shè)備,包括請(qǐng)求攔截模塊,用于攔截客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求;令牌讀取模塊,用于讀取客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求中的令牌;令牌驗(yàn)證模塊,用于驗(yàn)證客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求中的令牌是否有效。根據(jù)本公開的一個(gè)實(shí)施例,提供了一種用于防止CSRF攻擊的方法,包括攔截客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求;生成令牌;生成對(duì)請(qǐng)求的響應(yīng);將令牌插入到對(duì)請(qǐng)求的響應(yīng)中;以及向客戶端瀏覽器發(fā)送插入了令牌的對(duì)請(qǐng)求的響應(yīng)。根據(jù)本公開的一個(gè)實(shí)施例,提供了一種用于防止CSRF攻擊的方法,包括攔截客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求;讀取客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求中的令牌;驗(yàn)證客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求中的令牌是否有效。此外,本公開的實(shí)施例還提供了與上述方法對(duì)應(yīng)的計(jì)算機(jī)程序產(chǎn)品。利用本公開實(shí)施例提供的上述一個(gè)或多個(gè)實(shí)施例,能夠在不修改現(xiàn)有服務(wù)器的前提下,有效地防止CSRF攻擊。
本公開可以通過參考下文中結(jié)合附圖所給出的描述而得到更好的理解,其中在所有附圖中使用了相同或相似的附圖標(biāo)記來表示相同或者相似的部件。所述附圖連同下面的詳細(xì)說明一起包含在本說明書中并且形成本說明書的一部分,而且用來進(jìn)一步舉例說明本公開的優(yōu)選實(shí)施例和解釋本公開的原理和優(yōu)點(diǎn)。在附圖中圖1顯示了 CSRF攻擊的原理圖;圖2顯示了根據(jù)本公開的一個(gè)實(shí)施例的用于防止CSRF攻擊的方法200 ;圖3a顯示了根據(jù)本公開一個(gè)實(shí)施例的用于防止CSRF攻擊的方法300 ;圖北顯示了根據(jù)本公開一個(gè)實(shí)施例的用于防止CSRF攻擊的方法300可以包括的
一些可選步驟;圖4顯示了根據(jù)本公開實(shí)施例的信號(hào)流程。
具體實(shí)施例方式在下文中將結(jié)合附圖對(duì)本公開的示范性實(shí)施例進(jìn)行描述。為了清楚和簡明起見, 在說明書中并未描述實(shí)際實(shí)施方式的所有特征。然而,應(yīng)該了解,在開發(fā)任何這種實(shí)際實(shí)施例的過程中必須做出很多特定于該實(shí)際實(shí)施方式的決定,以便實(shí)現(xiàn)開發(fā)人員的具體目標(biāo), 例如,符合與系統(tǒng)及業(yè)務(wù)相關(guān)的那些限制條件,并且這些限制條件可能會(huì)隨著實(shí)施方式的不同而有所改變。此外,還應(yīng)該了解,雖然開發(fā)工作有可能是非常復(fù)雜和費(fèi)時(shí)的,但對(duì)得益于本公開公開內(nèi)容的本領(lǐng)域技術(shù)人員來說,這種開發(fā)工作僅僅是例行的任務(wù)。在此,還需要說明的一點(diǎn)是,為了避免因不必要的細(xì)節(jié)而模糊了本公開,在附圖中僅僅示出了與根據(jù)本公開的方案密切相關(guān)的裝置結(jié)構(gòu)和/或處理步驟,而省略了與本公開關(guān)系不大的其他細(xì)節(jié)。為了更好地對(duì)本公開中技術(shù)方案的原理進(jìn)行介紹,下面首先結(jié)合圖1介紹CSRF攻擊的原理。圖1示例性地顯示了 CSRF攻擊的原理。在圖1顯示的系統(tǒng)100中,用戶102通過其客戶端瀏覽器104訪問位于服務(wù)器108端的Web應(yīng)用110。通常情況下,服務(wù)器108首先需要驗(yàn)證用戶102的身份。驗(yàn)證用戶102身份的方式有多種,一般通過提示用戶102輸入用于訪問Web應(yīng)用110的認(rèn)證信息來進(jìn)行。用戶102接收到輸入提示后輸入用于訪問Web 應(yīng)用110的認(rèn)證信息并將包含認(rèn)證信息的登陸請(qǐng)求發(fā)送到服務(wù)器108。服務(wù)器108通過驗(yàn)證接收的登錄請(qǐng)求中包含的用戶102的認(rèn)證信息來驗(yàn)證用戶102是否為Web應(yīng)用110的合法用戶。假設(shè)用戶102輸入了正確的認(rèn)證信息,那么服務(wù)器108會(huì)認(rèn)為該用戶102為Web 應(yīng)用110的合法用戶。由于服務(wù)器108是通過cookie來識(shí)別用戶102的,當(dāng)用戶102成功進(jìn)行身份驗(yàn)證之后客戶端瀏覽器104就會(huì)得到一個(gè)識(shí)別用戶102身份的cookie,該cookie 包含用戶102的認(rèn)證信息,用于標(biāo)識(shí)用戶102的客戶端瀏覽器104與服務(wù)器108的Web應(yīng)用Iio之間會(huì)話。這里我們以Web應(yīng)用110為網(wǎng)上銀行,用戶102想要通過該網(wǎng)上銀行進(jìn)行轉(zhuǎn)賬操作為例說明CSRF攻擊的過程。假設(shè)用戶102在該銀行具有賬戶UA,他想通過網(wǎng)上銀行將1000元轉(zhuǎn)入到另一個(gè)賬戶UA2上。正常情況下,用戶102通過其客戶端瀏覽器104 發(fā)送的請(qǐng)求應(yīng)該是http://bank. example/withdraw ? account = UA&amount = 1000&for = UA2假設(shè)攻擊者106在該銀行具有賬戶ATT,同時(shí),他知道上下文中的URL可以進(jìn)行轉(zhuǎn)賬操作。這時(shí),攻擊者106通過在其擁有權(quán)限的某一頁面嵌入如下代碼src ='Tittp://bank, example/withdraw ? account = UA&amount = 1000&for = ATT,,并通過廣告等方式誘使用戶102訪問具有上述嵌入代碼的頁面。如果用戶102訪問了具有上述嵌入代碼的頁面,上述嵌入代碼將被執(zhí)行。即,用戶102的客戶端瀏覽器104 會(huì)將上述嵌入代碼中的URLhttp://bank. example/withdraw ? account = UA&amount = 1000&for = ATT連同用戶102的客戶端瀏覽器104中用于標(biāo)識(shí)用戶102的客戶端瀏覽器104和網(wǎng)上銀行之間會(huì)話的cookie —起發(fā)送給網(wǎng)上銀行??梢钥闯?,該URL對(duì)應(yīng)于將用戶102的賬戶UA中的1000元轉(zhuǎn)入到攻擊者106的賬戶ATT中的轉(zhuǎn)賬請(qǐng)求。通常情況下該請(qǐng)求會(huì)失敗, 因?yàn)榫W(wǎng)上銀行要求用戶102的認(rèn)證信息。但是,如果用戶102的客戶端瀏覽器104中用于標(biāo)識(shí)用戶102的客戶端瀏覽器104和網(wǎng)上銀行之間會(huì)話的cookie尚未過期,由于該cookie 中含有用戶102的認(rèn)證信息,那么網(wǎng)上銀行就會(huì)接收到包含用戶102的認(rèn)證信息的將用戶 102的賬戶UA中的1000元轉(zhuǎn)入到攻擊者106的賬戶ATT中的轉(zhuǎn)賬請(qǐng)求。由于該請(qǐng)求中包含了用戶102的認(rèn)證信息,網(wǎng)上銀行會(huì)將上述請(qǐng)求視為合法的請(qǐng)求進(jìn)行處理,即將用戶102 的賬戶UA中的1000元轉(zhuǎn)到了攻擊者106的賬戶ATT中。上面簡要描述了 CSRF攻擊的原理。下面將繼續(xù)結(jié)合上面的例子詳細(xì)介紹根據(jù)本公開的實(shí)施例用于防止CSRF攻擊的方法和設(shè)備。下面的描述均是示例性描述,在本公開中描述內(nèi)容的基礎(chǔ)上,所屬領(lǐng)域技術(shù)人員可以通過增加、減少、組合、修改等方式得到在本公開構(gòu)思所覆蓋范圍內(nèi)的其他可能的實(shí)施方式,所有這些都將落入本公開的保護(hù)范圍內(nèi)。本公開引入一個(gè)用于攔截客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求的設(shè)備,該設(shè)備向客戶端瀏覽器發(fā)送的請(qǐng)求中添加令牌。隨后,該設(shè)備會(huì)對(duì)客戶端瀏覽器發(fā)送的每一個(gè)請(qǐng)求進(jìn)行驗(yàn)證以確定每一個(gè)請(qǐng)求是否安全。下面參見圖2,其中顯示了根據(jù)本公開一個(gè)實(shí)施例的用于防止CSRF攻擊的設(shè)備 200的設(shè)備,包括請(qǐng)求攔截模塊202,用于攔截客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求;令牌生成模塊204,用于生成令牌;響應(yīng)生成模塊206,用于生成對(duì)請(qǐng)求的響應(yīng);令牌插入模塊208,用于將令牌插入到對(duì)請(qǐng)求的響應(yīng)中;以及響應(yīng)發(fā)送模塊210,用于向客戶端瀏覽器發(fā)送插入了令牌的對(duì)請(qǐng)求的響應(yīng)。其中,對(duì)請(qǐng)求的響應(yīng)可以是HTTP 307響應(yīng)。此外,根據(jù)本公開一個(gè)實(shí)施例的用于防止CSRF攻擊的設(shè)備200還可以包括令牌讀取模塊212,用于讀取客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求中的令牌;令牌驗(yàn)證模塊214,用于驗(yàn)證客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求中的令牌是否有效。如果客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求中請(qǐng)求的URL中不存在令牌,而Referer頭域中存在令牌并且令牌驗(yàn)證模塊214驗(yàn)證其令牌有效,則由響應(yīng)生成模塊206生成對(duì)后續(xù)請(qǐng)求的響應(yīng);由令牌插入模塊208將令牌插入到對(duì)后續(xù)請(qǐng)求的響應(yīng)中;以及由響應(yīng)發(fā)送模塊210向客戶端瀏覽器發(fā)送插入了令牌的對(duì)后續(xù)請(qǐng)求的響應(yīng)。此外,根據(jù)本公開一個(gè)實(shí)施例的用于防止CSRF攻擊的設(shè)備200還可以包括請(qǐng)求轉(zhuǎn)發(fā)模塊216,用于將客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求轉(zhuǎn)發(fā)到服務(wù)器。如果客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求中請(qǐng)求的URL中存在令牌并且令牌驗(yàn)證模塊214驗(yàn)證其令牌有效,則由請(qǐng)求轉(zhuǎn)發(fā)模塊216將后續(xù)請(qǐng)求轉(zhuǎn)發(fā)到服務(wù)器。此外,根據(jù)本公開一個(gè)實(shí)施例的用于防止CSRF攻擊的設(shè)備200還可以包括請(qǐng)求判斷模塊218,用于判斷客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求是否為Ajax請(qǐng)求。如果請(qǐng)求判斷模塊218確定客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求是Ajax請(qǐng)求,并且請(qǐng)求的URL 中不存在令牌而Referer頭域中存在令牌并且令牌驗(yàn)證模塊214驗(yàn)證其令牌有效,則由請(qǐng)求轉(zhuǎn)發(fā)模塊216將后續(xù)請(qǐng)求轉(zhuǎn)發(fā)到服務(wù)器。如果請(qǐng)求判斷模塊218確定客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求是非Ajax請(qǐng)求,并且請(qǐng)求的URL中不存在令牌而Referer頭域中存在令牌并且令牌驗(yàn)證模塊214驗(yàn)證其令牌有效,則由響應(yīng)生成模塊206生成對(duì)后續(xù)請(qǐng)求的響應(yīng);由令牌插入模塊208將令牌插入到對(duì)后續(xù)請(qǐng)求的響應(yīng)中;以及由響應(yīng)發(fā)送模塊210向客戶端瀏覽器發(fā)送插入了令牌的對(duì)后續(xù)請(qǐng)求的響應(yīng)。申請(qǐng)人:強(qiáng)調(diào),盡管圖2中顯示的用于防止CSRF攻擊的設(shè)備200包括多個(gè)模塊,但并不是每個(gè)模塊都是必須的,可以根據(jù)設(shè)計(jì)的需要增加或減少一些模塊。例如,用于防止 CSRF攻擊的設(shè)備200可以僅包含實(shí)線顯示的那些模塊。下面參見圖3a,其中顯示了根據(jù)本公開一個(gè)實(shí)施例的用于防止CSRF攻擊的方法 300。圖3a的方法300從步驟302開始。接下來,方法300進(jìn)入步驟304,其中攔截客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求??梢酝ㄟ^如圖2所示的設(shè)備200中的請(qǐng)求攔截模塊202對(duì)請(qǐng)求進(jìn)行攔截,請(qǐng)求攔截模塊202可以例如利用Java Servlet實(shí)現(xiàn)。可以采用現(xiàn)有的任意方式的對(duì)請(qǐng)求進(jìn)行攔截的方法來達(dá)到上述目的,這里不再贅述。接下來,方法300進(jìn)入步驟306,其中生成令牌,該令牌用于插入到要向客戶端瀏覽器返回的響應(yīng)中。令牌的生成可以利用現(xiàn)有技術(shù)中的算法和手段,例如利用UUID或隨機(jī)算法。接下來,方法300進(jìn)入步驟308,其中生成針對(duì)攔截的客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求的響應(yīng)。根據(jù)本公開的一個(gè)實(shí)施例,該響應(yīng)為HTTP307響應(yīng)。HTTP 307響應(yīng)是遵循 HTTP 1. 1協(xié)議的用于重定向的響應(yīng),能夠?qū)⒖蛻舳藶g覽器發(fā)送的HTTP請(qǐng)求(包括HTTP GET 和HTTP POST)重定向到預(yù)先設(shè)置的位置。接下來,方法300進(jìn)入步驟310,其中將生成的令牌插入到生成的針對(duì)攔截的客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求的響應(yīng)中。這時(shí),向客戶端瀏覽器返回的響應(yīng)中包含了在步驟306中生成的令牌。接下來,方法300進(jìn)入步驟312,結(jié)束。或者可選地,方法300還可以進(jìn)入圖3b。現(xiàn)在參見圖北,其中顯示了根據(jù)本公開一個(gè)實(shí)施例的用于防止CSRF攻擊的方法
8300可以包括的一些可選步驟。接圖3a,根據(jù)本公開一個(gè)實(shí)施例的用于防止CSRF攻擊的方法300還可以包括步驟 314,其中攔截客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求。這里,后續(xù)請(qǐng)求對(duì)應(yīng)于執(zhí)行如圖3a 顯示的方法,客戶端瀏覽器接收了設(shè)備200返回的響應(yīng)之后發(fā)送的請(qǐng)求。由于設(shè)備200向客戶端瀏覽器返回的響應(yīng)中被插入了令牌,因此,客戶端瀏覽器隨后向服務(wù)器發(fā)出的后續(xù)請(qǐng)求中也會(huì)包含該令牌。接下來,方法300進(jìn)入步驟316,其中讀取客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求中的令牌。接下來,方法300進(jìn)入步驟318,其中驗(yàn)證客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求中的令牌是否有效。之后,方法300進(jìn)入步驟320,其中通過比較讀取的客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求中的令牌與設(shè)備200中記錄的其向客戶端瀏覽器返回的響應(yīng)中插入的令牌是否相同來確定客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求中的令牌是否有效。如果兩者不同,方法300進(jìn)入步驟322,認(rèn)為該請(qǐng)求無效。之后方法300返回步驟314,繼續(xù)攔截客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求。如果兩者相同,方法300進(jìn)入步驟324,其中進(jìn)一步驗(yàn)證客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求中請(qǐng)求的URL中是否存在令牌。如果客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求中請(qǐng)求的URL中存在令牌并且有效,方法300進(jìn)入步驟326, 其中將后續(xù)請(qǐng)求轉(zhuǎn)發(fā)到服務(wù)器。由于攻擊者無法知道令牌的值,因此請(qǐng)求的URL中存在有效的令牌將說明該請(qǐng)求是安全的,因而可以將其轉(zhuǎn)發(fā)到服務(wù)器進(jìn)行處理。如果客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求中請(qǐng)求的URL中不存在令牌,則進(jìn)一步驗(yàn)證客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求中的Referer頭域中是否存在令牌以及令牌是否有效。Referer頭域是HTTP協(xié)議中定義的HTTP頭中的字段,允許客戶端指定請(qǐng)求 URL的源資源地址,這可以允許服務(wù)器生成回退鏈表。例如,用戶通過點(diǎn)擊IBM的主頁(ymi ibm. com)中的鏈接訪問IBM技術(shù)支持頁面(誦.ibm. com/support),那么客戶端瀏覽器發(fā)送的訪問IBM技術(shù)支持頁面的請(qǐng)求中的Referer頭域中將包含IBM的主頁的地址。例如, 該請(qǐng)求可能為GET http//www, ibm. com/support…Referer http //www, ibm. com…如果客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求中請(qǐng)求的URL中不存在令牌,而 Referer頭域中存在令牌并且有效,方法300進(jìn)入步驟328,其中生成對(duì)后續(xù)請(qǐng)求的響應(yīng);之后在步驟330,將令牌插入到對(duì)后續(xù)請(qǐng)求的響應(yīng)中,并在步驟332,向客戶端瀏覽器發(fā)送插入了令牌的對(duì)后續(xù)請(qǐng)求的響應(yīng)。可選地,如果客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求中請(qǐng)求的URL中不存在令牌,而Referer頭域中存在令牌并且有效,方法300還可以進(jìn)入步驟334,其中判斷客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求是否為Ajax請(qǐng)求,如果是Ajax請(qǐng)求,方法300進(jìn)入步驟326, 其中將后續(xù)請(qǐng)求轉(zhuǎn)發(fā)到服務(wù)器。如果不是Ajax請(qǐng)求,方法300進(jìn)入步驟328,其中生成對(duì)后續(xù)請(qǐng)求的響應(yīng);之后在步驟330,將令牌插入到對(duì)后續(xù)請(qǐng)求的響應(yīng)中,并在步驟332,向客戶端瀏覽器發(fā)送插入了令牌的對(duì)后續(xù)請(qǐng)求的響應(yīng)。由于Ajax請(qǐng)求的特點(diǎn),在已經(jīng)驗(yàn)證了令牌的有效性的前提下,可以認(rèn)為該請(qǐng)求是安全的,因而可以將其轉(zhuǎn)發(fā)到服務(wù)器進(jìn)行處理。下面參見圖4,其中顯示了根據(jù)本公開實(shí)施例的信號(hào)流程。申請(qǐng)人強(qiáng)調(diào),圖4只是為了說明的目的,不能認(rèn)為是對(duì)本公開保護(hù)范圍的限制。圖4中假設(shè)用戶通過他的客戶端瀏覽器請(qǐng)求訪問受保護(hù)的資源URL 1,如402所示。該請(qǐng)求發(fā)送到服務(wù)器的認(rèn)證模塊,認(rèn)證模塊提示用戶輸入認(rèn)證信息,如404所示。然后,用戶提供認(rèn)證信息,如406所示。接下來, 服務(wù)器驗(yàn)證模塊驗(yàn)證用戶提供的認(rèn)證信息。如果認(rèn)證信息正確,服務(wù)器驗(yàn)證模塊將請(qǐng)求向 URL 1轉(zhuǎn)發(fā),如408所示?,F(xiàn)有技術(shù)中,當(dāng)服務(wù)器驗(yàn)證模塊驗(yàn)證用戶的認(rèn)證信息正確之后請(qǐng)求會(huì)被直接轉(zhuǎn)發(fā)至服務(wù)器中的Web應(yīng)用。根據(jù)本公開的一個(gè)或多個(gè)實(shí)施例,設(shè)備200攔截該請(qǐng)求(這里是服務(wù)器認(rèn)證模塊轉(zhuǎn)發(fā)的訪問<URL 1>的請(qǐng)求)。之后,設(shè)備200中的令牌生成模塊生成令牌XXX (如410中所示的Token = XXX),將令牌XXX插入到向客戶端瀏覽器返回的響應(yīng)中,如410所示。根據(jù)本公開的一個(gè)實(shí)施例,設(shè)備200向客戶端瀏覽器返回HTTP 307響應(yīng),將請(qǐng)求重定向至<URL 1>。該響應(yīng)典型地如下所示HTTP 307 Temporary RedirectLocation:<URL 1> ? Token = XXX可見,該響應(yīng)中插入了令牌XXX,該令牌被加插入到用戶將再次請(qǐng)求的URL 1中, 艮口 <URL 1> ? Token = XXX,如 412 所示??蛻舳藶g覽器接收到插入了令牌XXX的響應(yīng)之后,請(qǐng)求訪問響應(yīng)中指定的地址 <URL 1>,這時(shí)的請(qǐng)求典型地如下所示GEIXURL 1> ? Token = XXX可見,該請(qǐng)求的URL中也插入了令牌XXX,即<URL1> ? iToken = XXX,如414所示。 這時(shí),設(shè)備200再次攔截該請(qǐng)求,并驗(yàn)證該請(qǐng)求中請(qǐng)求的URL中是否存在令牌并且令牌是否有效。如果請(qǐng)求的URL中存在令牌并且令牌有效,即請(qǐng)求的為<URL 1> ? Token = XXX,而 Token = XXX,設(shè)備200將該請(qǐng)求轉(zhuǎn)發(fā)至服務(wù)器的Web應(yīng)用,如416所示。Web應(yīng)用接收到請(qǐng)求后對(duì)其進(jìn)行響應(yīng),向客戶端瀏覽器返回請(qǐng)求的資源<URL 1>,如418所示。這時(shí),返回的資源<URL 1>對(duì)應(yīng)的頁面的地址中也插入了令牌XXX,即返回的頁面對(duì)應(yīng)的地址是<URL 1> ? Token = XXX。假設(shè)用戶在資源<URL 1>對(duì)應(yīng)的頁面內(nèi)通過點(diǎn)擊鏈接請(qǐng)求訪問資源<URL 2>。根據(jù)HTTP協(xié)議,這時(shí)的請(qǐng)求中會(huì)具有Referer頭域,以表明訪問資源<URL 2>的來源。這時(shí), 由于資源<URL 1>對(duì)應(yīng)的頁面的地址中已經(jīng)插入了令牌XXX,即<URL 1> ? Token = XXX, 典型的請(qǐng)求將如下所示GEIXURL 2>…Referer:<URL1> ? Token = XXX…S卩,該請(qǐng)求中也插入了令牌XXX,該令牌位于Referer頭域,如420所示。根據(jù)本公開的一個(gè)或多個(gè)實(shí)施例,設(shè)備200再次攔截該請(qǐng)求(這里是客戶端瀏覽器發(fā)送的通過<URL 1>訪問<URL 2>的請(qǐng)求),并驗(yàn)證該請(qǐng)求中請(qǐng)求的URL中是否存在令牌以及令牌是否有效,如422所示。如果請(qǐng)求的URL (這里是URL 2)中不存在令牌而Referer 頭域中存在令牌并且令牌有效,即Referer :<URL1> ? Token = XXX,并且Token = XXX,設(shè)備200再次將令牌XXX插入到向客戶端瀏覽器返回的響應(yīng)中,如4 所示。根據(jù)本公開的一個(gè)實(shí)施例,設(shè)備200向客戶端瀏覽器返回HTTP 307響應(yīng),將請(qǐng)求重定向至<URL 2>,并再次插入令牌XXX。該響應(yīng)典型地如下所示HTTP 307 Temporary RedirectLocation:<URL 2> ? Token = XXX可見,該響應(yīng)中也插入了令牌XXX,該令牌被插入到用戶將再次請(qǐng)求的URL 2中, 即 <URL 2> ? Token = XXX,如 424 所示。客戶端瀏覽器接收到插入了令牌的上述響應(yīng)之后,請(qǐng)求訪問響應(yīng)中指定的地址 <URL 2>,這時(shí)的請(qǐng)求典型地如下所示GEIXURL 2> ? Token = XXX可見,該請(qǐng)求中請(qǐng)求的URL中也插入了令牌XXX,如似6所示。這時(shí),設(shè)備200再次攔截該請(qǐng)求,并驗(yàn)證該請(qǐng)求中請(qǐng)求的URL中是否存在令牌以及令牌是否有效。如果請(qǐng)求的 URL中存在令牌并且令牌有效,即請(qǐng)求的為<URL 2> ? Token = XXX,而Token = XXX,設(shè)備 200將該請(qǐng)求轉(zhuǎn)發(fā)至服務(wù)器的Web應(yīng)用,如4 所示。Web應(yīng)用接收到請(qǐng)求后對(duì)其進(jìn)行響應(yīng), 向客戶端瀏覽器返回請(qǐng)求的資源<URL 2>,如430所示。這時(shí),返回的資源<URL 2>對(duì)應(yīng)的頁面的地址中也插入了令牌XXX,即<URL2> ? Token = XXX。下面簡要描述一下根據(jù)本公開的一些其他實(shí)施方式。根據(jù)本公開的一個(gè)實(shí)施例, 用于防止CSRF攻擊的設(shè)備,包括請(qǐng)求攔截模塊,用于攔截客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求;令牌讀取模塊,用于讀取客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求中的令牌;令牌驗(yàn)證模塊,用于驗(yàn)證客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求中的令牌是否有效??蛇x地,用于防止CSRF攻擊的設(shè)備進(jìn)一步包括請(qǐng)求轉(zhuǎn)發(fā)模塊,用于將客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求轉(zhuǎn)發(fā)到服務(wù)器。其中如果客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求中請(qǐng)求的URL中存在令牌并且令牌驗(yàn)證模塊驗(yàn)證其令牌有效,則由請(qǐng)求轉(zhuǎn)發(fā)模塊將后續(xù)請(qǐng)求轉(zhuǎn)發(fā)到服務(wù)器。可選地,用于防止CSRF攻擊的設(shè)備進(jìn)一步包括響應(yīng)生成模塊,用于生成對(duì)請(qǐng)求的響應(yīng);令牌插入模塊,用于將令牌插入到對(duì)請(qǐng)求的響應(yīng)中;以及響應(yīng)發(fā)送模塊,用于向客戶端瀏覽器發(fā)送插入了令牌的對(duì)請(qǐng)求的響應(yīng)。其中如果客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求中請(qǐng)求的URL中不存在令牌,而Referer頭域中存在令牌并且令牌驗(yàn)證模塊驗(yàn)證其令牌有效,則由響應(yīng)生成模塊生成對(duì)請(qǐng)求的響應(yīng);由令牌插入模塊將令牌插入到對(duì)請(qǐng)求的響應(yīng)中;由響應(yīng)發(fā)送模塊向客戶端瀏覽器發(fā)送插入了令牌的對(duì)請(qǐng)求的響應(yīng)??蛇x地,用于防止CSRF攻擊的設(shè)備進(jìn)一步包括請(qǐng)求判斷模塊,用于判斷客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求是否為Ajax請(qǐng)求。其中如果請(qǐng)求判斷模塊確定客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求是Ajax請(qǐng)求,并且請(qǐng)求的URL中不存在令牌而Referer頭域中存在令牌并且令牌驗(yàn)證模塊驗(yàn)證其令牌有效,則由請(qǐng)求轉(zhuǎn)發(fā)模塊將請(qǐng)求轉(zhuǎn)發(fā)到服務(wù)器。其中如果請(qǐng)求判斷模塊確定客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求是非Ajax請(qǐng)求,并且請(qǐng)求的URL中不存在令牌而Referer頭域中存在令牌并且令牌驗(yàn)證模塊驗(yàn)證其令牌有效,則由響應(yīng)生成模塊生成對(duì)請(qǐng)求的響應(yīng);由令牌插入模塊將令牌插入到對(duì)請(qǐng)求的響應(yīng)中;由響應(yīng)發(fā)送模塊向客戶端瀏覽器發(fā)送插入了令牌的對(duì)請(qǐng)求的響應(yīng)。根據(jù)本公開的一個(gè)實(shí)施例,用于防止CSRF攻擊的方法,包括攔截客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求;讀取客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求中的令牌;驗(yàn)證客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求中的令牌是否有效??蛇x地,用于防止CSRF攻擊的方法進(jìn)一步包括如果客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求中請(qǐng)求的URL中存在令牌并且令牌有效,則將后續(xù)請(qǐng)求轉(zhuǎn)發(fā)到服務(wù)器。可選地,用于防止CSRF攻擊的方法進(jìn)一步包括如果客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求中請(qǐng)求的URL中不存在令牌,而Referer頭域中存在令牌并且令牌有效,則生成對(duì)請(qǐng)求的響應(yīng);將令牌插入到對(duì)請(qǐng)求的響應(yīng)中;向客戶端瀏覽器發(fā)送插入了令牌的對(duì)請(qǐng)求的響應(yīng)??蛇x地,用于防止CSRF攻擊的方法進(jìn)一步包括判斷客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求是否為Ajax請(qǐng)求。其中如果客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求是Ajax請(qǐng)求,并且請(qǐng)求的URL中不存在令牌而Referer頭域中存在令牌并且令牌有效,則將請(qǐng)求轉(zhuǎn)發(fā)到服務(wù)器。其中如果客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求是非Ajax請(qǐng)求,并且請(qǐng)求的URL中不存在令牌而Referer頭域中存在令牌并且令牌有效,則生成對(duì)請(qǐng)求的響應(yīng);將令牌插入到對(duì)請(qǐng)求的響應(yīng)中;向客戶端瀏覽器發(fā)送插入了令牌的對(duì)請(qǐng)求的響應(yīng)。通過以上示例性的描述可以看出,利用本公開的方法和設(shè)備,在用戶通過客戶端瀏覽器訪問資源的請(qǐng)求中被插入了令牌,因而設(shè)備200能夠通過驗(yàn)證請(qǐng)求中令牌是否有效來確保請(qǐng)求是由用戶本人發(fā)出的,從而防止了 CSRF攻擊。以上結(jié)合具體實(shí)施例描述了本公開的基本原理,但是,需要指出的是,對(duì)本領(lǐng)域的普通技術(shù)人員而言,能夠理解本公開的方法和裝置的全部或者任何步驟或者部件,可以在任何計(jì)算裝置(包括處理器、存儲(chǔ)介質(zhì)等)或者計(jì)算裝置的網(wǎng)絡(luò)中,以硬件、固件、軟件或者它們的組合加以實(shí)現(xiàn),這是本領(lǐng)域普通技術(shù)人員在閱讀了本公開的說明的情況下運(yùn)用他們的基本編程技能就能實(shí)現(xiàn)的。因此,本公開的目的還可以通過在任何計(jì)算裝置上運(yùn)行一個(gè)程序或者一組程序來實(shí)現(xiàn)。所述計(jì)算裝置可以是公知的通用裝置。因此,本公開的目的也可以僅僅通過提供包含實(shí)現(xiàn)所述方法或者裝置的程序代碼的程序產(chǎn)品來實(shí)現(xiàn)。也就是說,這樣的程序產(chǎn)品也構(gòu)成本公開,并且存儲(chǔ)有這樣的程序產(chǎn)品的存儲(chǔ)介質(zhì)也構(gòu)成本公開。顯然,所述存儲(chǔ)介質(zhì)可以是任何公知的存儲(chǔ)介質(zhì)或者將來所開發(fā)出來的任何存儲(chǔ)介質(zhì)。還需要指出的是,在本公開的裝置和方法中,顯然,各部件或各步驟是可以分解和 /或重新組合的。這些分解和/或重新組合應(yīng)視為本公開的等效方案。并且,執(zhí)行上述系列處理的步驟可以自然地按照說明的順序按時(shí)間順序執(zhí)行,但是并不需要一定按照時(shí)間順序執(zhí)行。某些步驟可以并行或彼此獨(dú)立地執(zhí)行。雖然已經(jīng)詳細(xì)說明了本公開及其優(yōu)點(diǎn),但是應(yīng)當(dāng)理解在不脫離由所附的權(quán)利要求所限定的本公開的精神和范圍的情況下可以進(jìn)行各種改變、替代和變換。而且,本申請(qǐng)的術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者裝置不僅包括那些要素,而且還包括沒有明確列出的其他要素, 或者是還包括為這種過程、方法、物品或者裝置所固有的要素。在沒有更多限制的情況下,
由語句“包括一個(gè)......”限定的要素,并不排除在包括所述要素的過程、方法、物品或者裝
置中還存在另外的相同要素。
權(quán)利要求
1.一種用于防止CSRF攻擊的設(shè)備,包括請(qǐng)求攔截模塊,用于攔截客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求;令牌生成模塊,用于生成令牌;響應(yīng)生成模塊,用于生成對(duì)請(qǐng)求的響應(yīng);令牌插入模塊,用于將令牌插入到對(duì)請(qǐng)求的響應(yīng)中;以及響應(yīng)發(fā)送模塊,用于向客戶端瀏覽器發(fā)送插入了令牌的對(duì)請(qǐng)求的響應(yīng)。
2.根據(jù)權(quán)利要求1的設(shè)備,其中 所述響應(yīng)是HTTP 307響應(yīng)。
3.根據(jù)權(quán)利要求1或2的設(shè)備,進(jìn)一步包括由請(qǐng)求攔截模塊攔截客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求;令牌讀取模塊,用于讀取客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求中的令牌;令牌驗(yàn)證模塊,用于驗(yàn)證客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求中的令牌是否有效。
4.根據(jù)權(quán)利要求3的設(shè)備,進(jìn)一步包括請(qǐng)求轉(zhuǎn)發(fā)模塊,用于將客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求轉(zhuǎn)發(fā)到服務(wù)器。
5.根據(jù)權(quán)利要求4的設(shè)備,其中如果客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求中請(qǐng)求的URL中存在令牌并且令牌驗(yàn)證模塊驗(yàn)證其令牌有效,則由請(qǐng)求轉(zhuǎn)發(fā)模塊將后續(xù)請(qǐng)求轉(zhuǎn)發(fā)到服務(wù)器。
6.根據(jù)權(quán)利要求3的設(shè)備,其中如果客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求中請(qǐng)求的URL中不存在令牌,而Referer 頭域中存在令牌并且令牌驗(yàn)證模塊驗(yàn)證其令牌有效,則 由響應(yīng)生成模塊生成對(duì)后續(xù)請(qǐng)求的響應(yīng); 由令牌插入模塊將令牌插入到對(duì)后續(xù)請(qǐng)求的響應(yīng)中; 由響應(yīng)發(fā)送模塊向客戶端瀏覽器發(fā)送插入了令牌的對(duì)后續(xù)請(qǐng)求的響應(yīng)。
7.根據(jù)權(quán)利要求3的設(shè)備,進(jìn)一步包括請(qǐng)求判斷模塊,用于判斷客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求是否為Ajax請(qǐng)求。
8.根據(jù)權(quán)利要求7的設(shè)備,其中如果請(qǐng)求判斷模塊確定客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求是Ajax請(qǐng)求,并且請(qǐng)求的URL中不存在令牌而Referer頭域中存在令牌并且令牌驗(yàn)證模塊驗(yàn)證其令牌有效, 則由請(qǐng)求轉(zhuǎn)發(fā)模塊將后續(xù)請(qǐng)求轉(zhuǎn)發(fā)到服務(wù)器。
9.根據(jù)權(quán)利要求7的設(shè)備,其中如果請(qǐng)求判斷模塊確定客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求是非Ajax請(qǐng)求,并且請(qǐng)求的URL中不存在令牌而Referer頭域中存在令牌并且令牌驗(yàn)證模塊驗(yàn)證其令牌有效, 則由響應(yīng)生成模塊生成對(duì)后續(xù)請(qǐng)求的響應(yīng);由令牌插入模塊將令牌插入到對(duì)后續(xù)請(qǐng)求的響應(yīng)中;由響應(yīng)發(fā)送模塊向客戶端瀏覽器發(fā)送插入了令牌的對(duì)后續(xù)請(qǐng)求的響應(yīng)。
10.一種用于防止CSRF攻擊的方法,包括攔截客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求;生成令牌;生成對(duì)請(qǐng)求的響應(yīng);將令牌插入到對(duì)請(qǐng)求的響應(yīng)中;以及向客戶端瀏覽器發(fā)送插入了令牌的對(duì)請(qǐng)求的響應(yīng)。
11.根據(jù)權(quán)利要求10的方法,其中 所述響應(yīng)是HTTP 307響應(yīng)。
12.根據(jù)權(quán)利要求10或11的方法,進(jìn)一步包括 攔截客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求;讀取客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求中的令牌; 驗(yàn)證客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求中的令牌是否有效。
13.根據(jù)權(quán)利要求12的方法,進(jìn)一步包括如果客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求中請(qǐng)求的URL中存在令牌并且令牌有效,則將后續(xù)請(qǐng)求轉(zhuǎn)發(fā)到服務(wù)器。
14.根據(jù)權(quán)利要求12的方法,進(jìn)一步包括如果客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求中請(qǐng)求的URL中不存在令牌,而Referer頭域中存在令牌并且令牌有效,則 生成對(duì)后續(xù)請(qǐng)求的響應(yīng); 將令牌插入到對(duì)后續(xù)請(qǐng)求的響應(yīng)中; 向客戶端瀏覽器發(fā)送插入了令牌的對(duì)后續(xù)請(qǐng)求的響應(yīng)。
15.根據(jù)權(quán)利要求12的方法,進(jìn)一步包括判斷客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求是否為Ajax請(qǐng)求。
16.根據(jù)權(quán)利要求15的方法,其中如果客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求是Ajax請(qǐng)求,并且請(qǐng)求的URL中不存在令牌而Referer頭域中存在令牌并且令牌有效,則 將后續(xù)請(qǐng)求轉(zhuǎn)發(fā)到服務(wù)器。
17.根據(jù)權(quán)利要求15的方法,其中如果客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求是非Ajax請(qǐng)求,并且請(qǐng)求的URL中不存在令牌而Referer頭域中存在令牌并且令牌有效,則 生成對(duì)后續(xù)請(qǐng)求的響應(yīng); 將令牌插入到對(duì)后續(xù)請(qǐng)求的響應(yīng)中; 向客戶端瀏覽器發(fā)送插入了令牌的對(duì)后續(xù)請(qǐng)求的響應(yīng)。
18.一種用于防止CSRF攻擊的設(shè)備,包括請(qǐng)求攔截模塊,用于攔截客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求;令牌讀取模塊,用于讀取客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求中的令牌;令牌驗(yàn)證模塊,用于驗(yàn)證客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求中的令牌是否有效。
19.根據(jù)權(quán)利要求18的設(shè)備,進(jìn)一步包括請(qǐng)求轉(zhuǎn)發(fā)模塊,用于將客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求轉(zhuǎn)發(fā)到服務(wù)器。
20.根據(jù)權(quán)利要求19的設(shè)備,其中如果客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求中請(qǐng)求的URL中存在令牌并且令牌驗(yàn)證模塊驗(yàn)證其令牌有效,則由請(qǐng)求轉(zhuǎn)發(fā)模塊將后續(xù)請(qǐng)求轉(zhuǎn)發(fā)到服務(wù)器。
21.根據(jù)權(quán)利要求18的設(shè)備,進(jìn)一步包括 響應(yīng)生成模塊,用于生成對(duì)請(qǐng)求的響應(yīng);令牌插入模塊,用于將令牌插入到對(duì)請(qǐng)求的響應(yīng)中;以及響應(yīng)發(fā)送模塊,用于向客戶端瀏覽器發(fā)送插入了令牌的對(duì)請(qǐng)求的響應(yīng)。
22.根據(jù)權(quán)利要求21的設(shè)備,其中如果客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求中請(qǐng)求的URL中不存在令牌,而Referer頭域中存在令牌并且令牌驗(yàn)證模塊驗(yàn)證其令牌有效,則 由響應(yīng)生成模塊生成對(duì)請(qǐng)求的響應(yīng); 由令牌插入模塊將令牌插入到對(duì)請(qǐng)求的響應(yīng)中; 由響應(yīng)發(fā)送模塊向客戶端瀏覽器發(fā)送插入了令牌的對(duì)請(qǐng)求的響應(yīng)。
23.一種用于防止CSRF攻擊的方法,包括 攔截客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求; 讀取客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求中的令牌;驗(yàn)證客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求中的令牌是否有效。
24.根據(jù)權(quán)利要求23的方法,進(jìn)一步包括如果客戶端瀏覽器向服務(wù)器發(fā)送的后續(xù)請(qǐng)求中請(qǐng)求的URL中存在令牌并且令牌有效,則將后續(xù)請(qǐng)求轉(zhuǎn)發(fā)到服務(wù)器。
25.根據(jù)權(quán)利要求23的方法,進(jìn)一步包括如果客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求中請(qǐng)求的URL中不存在令牌,而Referer頭域中存在令牌并且令牌有效,則 生成對(duì)請(qǐng)求的響應(yīng); 將令牌插入到對(duì)請(qǐng)求的響應(yīng)中; 向客戶端瀏覽器發(fā)送插入了令牌的對(duì)請(qǐng)求的響應(yīng)。
全文摘要
本公開提供了一種用于防止CSRF攻擊的設(shè)備和方法,其中方法包括攔截客戶端瀏覽器向服務(wù)器發(fā)送的請(qǐng)求;生成令牌;生成對(duì)請(qǐng)求的響應(yīng);將令牌插入到對(duì)請(qǐng)求的響應(yīng)中;以及向客戶端瀏覽器發(fā)送插入了令牌的對(duì)請(qǐng)求的響應(yīng)。通過本公開的設(shè)備和方法,確保用戶通過客戶端瀏覽器訪問資源的請(qǐng)求中都被插入了令牌,通過驗(yàn)證請(qǐng)求中令牌是否有效來確保請(qǐng)求是由用戶本人發(fā)出的,從而防止了CSRF攻擊。
文檔編號(hào)H04L29/06GK102480490SQ20101058035
公開日2012年5月30日 申請(qǐng)日期2010年11月30日 優(yōu)先權(quán)日2010年11月30日
發(fā)明者D·S·梅利克謝申, 牛剛, 童強(qiáng)國 申請(qǐng)人:國際商業(yè)機(jī)器公司