CSRF 攻擊是什么?如何防范邓深?

什么是CSRF?

跨站請求偽造(Cross-site request forgery)未桥,也被稱為 one-click attack 或者 session riding,通辰姹福縮寫為 CSRF 或者 XSRF冬耿, 是一種挾制用戶在當(dāng)前已登錄的Web應(yīng)用程序上執(zhí)行非本意的操作的攻擊方法。跟跨網(wǎng)站腳本(XSS)相比萌壳,XSS利用的是用戶對指定網(wǎng)站的信任亦镶,CSRF 利用的是網(wǎng)站對用戶網(wǎng)頁瀏覽器的信任。

關(guān)于CSRF 攻擊的簡單解釋

跨站請求攻擊袱瓮,簡單地說缤骨,是攻擊者通過一些技術(shù)手段欺騙用戶的瀏覽器去訪問一個自己曾經(jīng)認(rèn)證過的網(wǎng)站并執(zhí)行一些操作(如發(fā)郵件,發(fā)消息尺借,甚至財產(chǎn)操作如轉(zhuǎn)賬和購買商品)绊起。由于瀏覽器曾經(jīng)認(rèn)證過,所以被訪問的網(wǎng)站會認(rèn)為是真正的用戶操作而去執(zhí)行燎斩。這利用了web中用戶身份驗證的一個漏洞:簡單的身份驗證只能保證請求發(fā)自某個用戶的瀏覽器虱歪,卻不能保證請求本身是用戶自愿發(fā)出的蜂绎。

CSRF的原理

20160501122732149.jpg
  1. 用戶C打開瀏覽器,訪問受信任網(wǎng)站A笋鄙,輸入用戶名和密碼請求登錄網(wǎng)站A师枣;
  2. 在用戶信息通過驗證后岸蜗,網(wǎng)站A產(chǎn)生Cookie信息并返回給瀏覽器畏浆,此時用戶登錄網(wǎng)站A成功全封,可以正常發(fā)送請求到網(wǎng)站A颂翼;
  3. 用戶未退出網(wǎng)站A之前,在同一瀏覽器中姐刁,打開一個TAB頁訪問網(wǎng)站B余掖;
  4. 網(wǎng)站B接收到用戶請求后田篇,返回一些攻擊性代碼许布,并發(fā)出一個請求要求訪問第三方站點A玫膀;
  5. 瀏覽器在接收到這些攻擊性代碼后,根據(jù)網(wǎng)站B的請求爹脾,在用戶不知情的情況下攜帶Cookie信息,向網(wǎng)站A發(fā)出請求箕昭。網(wǎng)站A并不知道該請求其實是由B發(fā)起的灵妨,所以會根據(jù)用戶C的Cookie信息以C的權(quán)限處理該請求,導(dǎo)致來自網(wǎng)站B的惡意代碼被執(zhí)行落竹。

CSRF例子

受害者 Bob 在銀行有一筆存款泌霍,通過對銀行的網(wǎng)站發(fā)送請求: http://bank.example/withdraw?account=bob&amount=1000000&for=bob2
使 Bob 把 100w 的存款轉(zhuǎn)到 bob2 的賬號下。通常情況下述召,該請求發(fā)送到網(wǎng)站后朱转,服務(wù)器會先驗證該請求是否來自一個合法的 session,并且該 session 的用戶 Bob 已經(jīng)成功登陸积暖。黑客 Mallory 自己在該銀行也有賬戶藤为,他知道上文中的 URL 可以把錢進行轉(zhuǎn)帳操作。Mallory 可以自己發(fā)送一個請求給銀行:
http://bank.example/withdraw?account=bob&amount=1000000&for=Mallory
但是這個請求來自 Mallory 而非 Bob夺刑,他不能通過安全認(rèn)證缅疟,因此該請求不會起作用。這時遍愿,Mallory 想到使用 CSRF 的攻擊方式存淫,他先自己做一個網(wǎng)站,在網(wǎng)站中放入如下代碼:
src="http://bank.example/withdraw?account=bob&amount=1000000&for=Mallory"
并且通過廣告等誘使 Bob 來訪問他的網(wǎng)站沼填。當(dāng) Bob 訪問該網(wǎng)站時桅咆,上述 URL 就會從 Bob 的瀏覽器發(fā)向銀行,而這個請求會附帶 Bob 瀏覽器中的 cookie 一起發(fā)向銀行服務(wù)器坞笙。大多數(shù)情況下岩饼,該請求會失敗荚虚,因為他要求 Bob 的認(rèn)證信息。但是忌愚,如果 Bob 當(dāng)時恰巧剛訪問他的銀行后不久曲管,他的瀏覽器與銀行網(wǎng)站之間的 session 尚未過期,瀏覽器的 cookie 之中含有 Bob 的認(rèn)證信息硕糊。這時院水,悲劇發(fā)生了,這個 url 請求就會得到響應(yīng)简十,錢將從 Bob 的賬號轉(zhuǎn)移到 Mallory 的賬號檬某,而 Bob 當(dāng)時毫不知情。等以后 Bob 發(fā)現(xiàn)賬戶錢少了螟蝙,即使他去銀行查詢?nèi)罩净帜眨仓荒馨l(fā)現(xiàn)確實有一個來自于他本人的合法請求轉(zhuǎn)移了資金,沒有任何被攻擊的痕跡胰默。而 Mallory 則可以拿到錢后逍遙法外场斑。

  • 這種惡意的網(wǎng)址可以有很多種形式,藏身于網(wǎng)頁中的許多地方牵署。此外漏隐,攻擊者也不需要控制放置惡意網(wǎng)址的網(wǎng)站。例如他可以將這種地址藏在論壇奴迅,博客等任何用戶生成內(nèi)容的網(wǎng)站中青责。這意味著如果服務(wù)器端沒有合適的防御措施的話,用戶即使訪問熟悉的可信網(wǎng)站也有受攻擊的危險取具。
  • 透過例子能夠看出脖隶,攻擊者并不能通過CSRF攻擊來直接獲取用戶的賬戶控制權(quán),也不能直接竊取用戶的任何信息暇检。他們能做到的产阱,是欺騙用戶瀏覽器,讓其以用戶的名義執(zhí)行操作占哟。

CSRF的防范措施

  • 檢查Referer字段
    HTTP頭中有一個Referer字段心墅,這個字段用以標(biāo)明請求來源于哪個地址。在處理敏感數(shù)據(jù)請求時榨乎,通常來說怎燥,Referer字段應(yīng)和請求的地址位于同一域名下。以上文銀行操作為例蜜暑,Referer字段地址通常應(yīng)該是轉(zhuǎn)賬按鈕所在的網(wǎng)頁地址铐姚,應(yīng)該也位于www.examplebank.com之下。而如果是CSRF攻擊傳來的請求,Referer字段會是包含惡意網(wǎng)址的地址隐绵,不會位于www.examplebank.com之下之众,這時候服務(wù)器就能識別出惡意的訪問。這種辦法簡單易行依许,工作量低棺禾,僅需要在關(guān)鍵訪問處增加一步校驗。但這種辦法也有其局限性峭跳,因其完全依賴瀏覽器發(fā)送正確的Referer字段膘婶。雖然http協(xié)議對此字段的內(nèi)容有明確的規(guī)定,但并無法保證來訪的瀏覽器的具體實現(xiàn)蛀醉,亦無法保證瀏覽器沒有安全漏洞影響到此字段悬襟。并且也存在攻擊者攻擊某些瀏覽器,篡改其Referer字段的可能拯刁。

  • 添加校驗token

由于CSRF的本質(zhì)在于攻擊者欺騙用戶去訪問自己設(shè)置的地址脊岳,所以如果要求在訪問敏感數(shù)據(jù)請求時,要求用戶瀏覽器提供不保存在cookie中垛玻,并且攻擊者無法偽造的數(shù)據(jù)作為校驗割捅,那么攻擊者就無法再執(zhí)行CSRF攻擊。這種數(shù)據(jù)通常是表單中的一個數(shù)據(jù)項帚桩。服務(wù)器將其生成并附加在表單中棺牧,其內(nèi)容是一個偽亂數(shù)。當(dāng)客戶端通過表單提交請求時朗儒,這個偽亂數(shù)也一并提交上去以供校驗。正常的訪問時参淹,客戶端瀏覽器能夠正確得到并傳回這個偽亂數(shù)醉锄,而通過CSRF傳來的欺騙性攻擊中,攻擊者無從事先得知這個偽亂數(shù)的值浙值,服務(wù)器端就會因為校驗token的值為空或者錯誤恳不,拒絕這個可疑請求。

參考鏈接:
https://blog.csdn.net/u012322925/article/details/51290054
https://zh.wikipedia.org/wiki/%E8%B7%A8%E7%AB%99%E8%AF%B7%E6%B1%82%E4%BC%AA%E9%80%A0
https://www.ibm.com/developerworks/cn/web/1102_niugang_csrf/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末开呐,一起剝皮案震驚了整個濱河市烟勋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌筐付,老刑警劉巖卵惦,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瓦戚,居然都是意外死亡沮尿,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門较解,熙熙樓的掌柜王于貴愁眉苦臉地迎上來畜疾,“玉大人赴邻,你說我怎么就攤上這事》却罚” “怎么了姥敛?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長瞎暑。 經(jīng)常有香客問我彤敛,道長,這世上最難降的妖魔是什么金顿? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任臊泌,我火速辦了婚禮,結(jié)果婚禮上揍拆,老公的妹妹穿的比我還像新娘渠概。我一直安慰自己,他們只是感情好嫂拴,可當(dāng)我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布播揪。 她就那樣靜靜地躺著,像睡著了一般筒狠。 火紅的嫁衣襯著肌膚如雪猪狈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天辩恼,我揣著相機與錄音雇庙,去河邊找鬼。 笑死灶伊,一個胖子當(dāng)著我的面吹牛疆前,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播聘萨,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼竹椒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了米辐?” 一聲冷哼從身側(cè)響起胸完,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎翘贮,沒想到半個月后赊窥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡狸页,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年誓琼,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡腹侣,死狀恐怖叔收,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情傲隶,我是刑警寧澤饺律,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站跺株,受9級特大地震影響复濒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜乒省,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一巧颈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧袖扛,春花似錦砸泛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至惨篱,卻和暖如春盏筐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背砸讳。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工琢融, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人簿寂。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓吏奸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親陶耍。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容