防御 CSRF 攻擊,可以在表單頁面的表單中生成一個 token,寫在隱藏域中,同時保存在 session,使用 POST 方式,服務(wù)器端驗證 token,那么如下這種方式攻擊為什么不可以?
在中間網(wǎng)站我請求兩次,第一次通過 GET 方式請求這個表單頁面從而獲取 token,第二次帶上這個 token 發(fā)起 POST 請求,這樣不就成功偽裝了嗎?我這個想法應(yīng)該有問題,但好像又可以,錯在哪?
在中間網(wǎng)站我請求兩次,第一次通過 GET 方式請求這個表單頁面從而獲取 token,第二次帶上這個 token 發(fā)起 POST 請求,這樣不就成功偽裝了嗎?我這個想法應(yīng)該有問題,但好像又可以,錯在哪?
中間網(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ǔ)的問題,那么多回答,竟然只有一個稍微靠譜點的…………
CSRF的理解應(yīng)該是沒問題的
我說一下我的疑問點:
1.第一次通過 GET 方式請求這個表單頁面從而獲取 token
關(guān)注你的token獲取,token本身是什么,就是服務(wù)器端對你這個訪問者的一個標(biāo)識。
表單提交頁面,如果本身不需要你登錄,那么本身就可以隨便攻擊,因為服務(wù)器端根本無法識別的你的身份。
那么如果你登錄了,你通過使用這個token進行攻擊,已經(jīng)暴露你是誰。也就不存在偽裝的意義。
所以就我理解,這個不能稱為所謂的攻擊,這能說模仿請求。。
我認(rèn)為的攻擊應(yīng)該是這樣的,敵人無法判斷你是誰,然而你卻能獲取到資源。
我自己回答一下:
首先,我說的第一步通過中間頁用 GET 方法請求表單頁面,獲取到 token,這個沒問題,第二步,把獲取到的 token 用于動態(tài)構(gòu)造的表單中發(fā)送 POST 請求,這個也可以實現(xiàn),但是第二步請求 token 驗證不會成功。
關(guān)鍵在于 session 機制,通過中間頁去請求服務(wù)器頁面,生成 token 并放在 session 中,這個 token 只對中間頁 sessionid 標(biāo)識有效,因為這個請求是中間頁發(fā)起的,而不是用戶 cookie 中的 sessionid,所以服務(wù)器在驗證 token 的時候會發(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
的時效性;沒有絕對安全的方法,但是可以盡量遵循安全的編程規(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
中公教育集團創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團,成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達內(nèi)教育集團成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。