防御 CSRF 攻擊,可以在表單頁面的表單中生成一個(gè) token,寫在隱藏域中,同時(shí)保存在 session,使用 POST 方式,服務(wù)器端驗(yàn)證 token,那么如下這種方式攻擊為什么不可以?
在中間網(wǎng)站我請求兩次,第一次通過 GET 方式請求這個(gè)表單頁面從而獲取 token,第二次帶上這個(gè) token 發(fā)起 POST 請求,這樣不就成功偽裝了嗎?我這個(gè)想法應(yīng)該有問題,但好像又可以,錯(cuò)在哪?
在中間網(wǎng)站我請求兩次,第一次通過 GET 方式請求這個(gè)表單頁面從而獲取 token,第二次帶上這個(gè) token 發(fā)起 POST 請求,這樣不就成功偽裝了嗎?我這個(gè)想法應(yīng)該有問題,但好像又可以,錯(cuò)在哪?
中間網(wǎng)站是什么?
如果是指中間人攻擊,那么,你應(yīng)該關(guān)注的是 HTTPS。CSRF 不處理中間人攻擊。
如果是指第三方網(wǎng)站,那么,除非你的網(wǎng)站通過 Access-Control-Allow-Origin 頭允許,否則第三方網(wǎng)站無法讀取請求返回的內(nèi)容(跟其它一些跨域請求的處理一樣,能請求,但是未經(jīng)允許不得訪問),也就拿不到 token。
PS: 這么基礎(chǔ)的問題,那么多回答,竟然只有一個(gè)稍微靠譜點(diǎn)的…………
CSRF的理解應(yīng)該是沒問題的
我說一下我的疑問點(diǎn):
1.第一次通過 GET 方式請求這個(gè)表單頁面從而獲取 token
關(guān)注你的token獲取,token本身是什么,就是服務(wù)器端對你這個(gè)訪問者的一個(gè)標(biāo)識。
表單提交頁面,如果本身不需要你登錄,那么本身就可以隨便攻擊,因?yàn)榉?wù)器端根本無法識別的你的身份。
那么如果你登錄了,你通過使用這個(gè)token進(jìn)行攻擊,已經(jīng)暴露你是誰。也就不存在偽裝的意義。
所以就我理解,這個(gè)不能稱為所謂的攻擊,這能說模仿請求。。
我認(rèn)為的攻擊應(yīng)該是這樣的,敵人無法判斷你是誰,然而你卻能獲取到資源。
我自己回答一下:
首先,我說的第一步通過中間頁用 GET 方法請求表單頁面,獲取到 token,這個(gè)沒問題,第二步,把獲取到的 token 用于動(dòng)態(tài)構(gòu)造的表單中發(fā)送 POST 請求,這個(gè)也可以實(shí)現(xiàn),但是第二步請求 token 驗(yàn)證不會(huì)成功。
關(guān)鍵在于 session 機(jī)制,通過中間頁去請求服務(wù)器頁面,生成 token 并放在 session 中,這個(gè) token 只對中間頁 sessionid 標(biāo)識有效,因?yàn)檫@個(gè)請求是中間頁發(fā)起的,而不是用戶 cookie 中的 sessionid,所以服務(wù)器在驗(yàn)證 token 的時(shí)候會(huì)發(fā)現(xiàn)不一致,用戶 sessionid 對應(yīng)的 token 的值,跟中間頁 GET 請求頁面生成的 token 值不一致。
首先,token
是在表單隱藏域中,第三方通過 get
方式如何獲???
其次,提供 token
的網(wǎng)站要避免通過 get
方式傳遞 token
。
token
的方式不是絕對安全的,但是可以通過以下方式提升其安全性:
Referer
和 token
結(jié)合使用,服務(wù)端判斷 token
之前,先判斷 Referer
是否為本站;token
,限制 token
的時(shí)效性;沒有絕對安全的方法,但是可以盡量遵循安全的編程規(guī)范。
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團(tuán)創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機(jī)構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團(tuán),成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。