基本介紹
- 中文名:跨站請求偽造
- 外文名:CSRF
- 類型:概念
- 類別:網路
- 縮寫:CSRF
示例特性,風險提示,相關威脅,防範措施,影響因素,
示例特性
攻擊通過在授權用戶訪問的頁面中包含連結或者腳本的方式工作。例如:一個網站用戶Bob可能正在瀏覽聊天論壇,而同時另一個用戶Alice也在此論壇中,並且後者剛剛發布了一個具有Bob銀行連結的圖片訊息。構想一下,Alice編寫了一個在Bob的銀行站點上進行取款的form提交的連結,並將此連結作為圖片src。如果Bob的銀行在cookie中保存他的授權信息,並且此cookie沒有過期,那么當Bob的瀏覽器嘗試裝載圖片時將提交這個取款form和他的cookie,這樣在沒經Bob同意的情況下便授權了這次事務。
CSRF是一種依賴web瀏覽器的、被混淆過的代理人攻擊(deputy attack)。在上面銀行示例中的代理人是Bob的web瀏覽器,它被混淆後誤將Bob的授權直接交給了Alice使用。
下面是CSRF的常見特性:
依靠用戶標識危害網站
利用網站對用戶標識的信任
欺騙用戶的瀏覽器傳送HTTP請求給目標站點
另外可以通過IMG標籤會觸發一個GET請求,可以利用它來實現CSRF攻擊。
風險提示
風險在於那些通過基於受信任的輸入form和對特定行為無需授權的已認證的用戶來執行某些行為的web套用。已經通過被保存在用戶瀏覽器中的cookie進行認證的用戶將在完全無知的情況下傳送HTTP請求到那個信任他的站點,進而進行用戶不願做的行為。
使用圖片的CSRF攻擊常常出現在網路論壇中,因為那裡允許用戶發布圖片而不能使用JavaScript。
相關威脅
貼圖只是GET的方式,很多時候我們需要偽造POST的請求。一個辦法是利用跨站,當然目標站點可能不存在跨站,這個時候我們可以從第三方網站發動攻擊。
比如我要攻擊一個存在問題的blog,那就先去目標blog留言,留下一個網址,誘其主人點擊過來(這個就要看你的忽悠本事咯:p),然後構造個HTML表單提交些數據過去。
多視窗瀏覽器就幫了一點忙。
多視窗瀏覽器(firefox、遨遊、MyIE……)便捷的同時也帶來了一些問題,因為多視窗瀏覽器新開的視窗是具有當前所有會話的。即我用IE登入了我的Blog,然後我想看新聞了,又運行一個IE進程,這個時候兩個IE視窗的會話是彼此獨立的,從看新聞的IE傳送請求到Blog不會有我登錄的cookie;但是多視窗瀏覽器永遠都只有一個進程,各視窗的會話是通用的,即看新聞的視窗發請求到Blog是會帶上我在blog登錄的cookie。
想一想,當我們用滑鼠在Blog/BBS/WebMail點擊別人留下的連結的時候,說不定一場精心準備的CSRF攻擊正等著我們。
防範措施
對於web站點,將持久化的授權方法(例如cookie或者HTTP授權)切換為瞬時的授權方法(在每個form中提供隱藏field),這將幫助網站防止這些攻擊。一種類似的方式是在form中包含秘密信息、用戶指定的代號作為cookie之外的驗證。
另一個可選的方法是“雙提交”cookie。此方法只工作於Ajax請求,但它能夠作為無需改變大量form的全局修正方法。如果某個授權的cookie在form post之前正被JavaScript代碼讀取,那么限制跨域規則將被套用。如果伺服器需要在Post請求體或者URL中包含授權cookie的請求,那么這個請求必須來自於受信任的域,因為其它域是不能從信任域讀取cookie的。
與通常的信任想法相反,使用Post代替Get方法並不能提供卓有成效的保護。因為JavaScript能使用偽造的POST請求。儘管如此,那些導致對安全產生“副作用”的請求應該總使用Post方式傳送。Post方式不會在web伺服器和代理伺服器日誌中留下數據尾巴,然而Get方式卻會留下數據尾巴。
儘管CSRF是web套用的基本問題,而不是用戶的問題,但用戶能夠在缺乏安全設計的網站上保護他們的帳戶:通過在瀏覽其它站點前登出站點或者在瀏覽器會話結束後清理瀏覽器的cookie。
影響因素
CSRF攻擊依賴下面的假定:
攻擊者了解受害者所在的站點
攻擊者的目標站點具有持久化授權cookie或者受害者具有當前會話cookie
目標站點沒有對用戶在網站行為的第二授權