CSRF 攻擊及防禦

2021-09-10 17:37:36 字數 1501 閱讀 3091

1. csrf 是什麼?

csrf(cross-site request forgery),中文名稱:跨站請求偽造,也被稱為:one click attack/session riding,縮寫為:csrf/xsrf。

2. scrf有哪些危害?

攻擊者可以利用你的身份進行一些操作:傳送郵件,發訊息,盜取你的賬號,甚至於購買商品,虛擬貨幣轉賬......造成的問題包括:個人隱私洩露以及財產安全。

3. csrf的執行機制?

從上圖可以看出,要完成一次csrf攻擊,受害者必須依次完成兩個步驟:

1.登入受信任**a,並在本地生成cookie。

2.在不登出a的情況下,訪問危險**b。

看到這裡,你也許會說:「如果我不滿足以上兩個條件中的乙個,我就不會受到csrf的攻擊」。是的,確實如此,但你不能保證以下情況不會發生:

1.你不能保證你登入了乙個**後,不再開啟乙個tab頁面並訪問另外的**。

2.你不能保證你關閉瀏覽器了後,你本地的cookie立刻過期,你上次的會話已經結束。(事實上,關閉瀏覽器不能結束乙個會話,但大多數人都會錯誤的認為關閉瀏覽器就等於退出登入/結束會話了......)

3.上圖中所謂的攻擊**,可能是乙個存在其他漏洞的可信任的經常被人訪問的**。

4. 怎樣防禦scrf?

csrf的防禦可以從服務端和客戶端兩方面著手,防禦效果是從服務端著手效果比較好,現在一般的csrf防禦也都在服務端進行。

服務端的csrf方式方法很多樣,但總的思想都是一致的,就是在客戶端頁面增加偽隨機數。

1、cookie hashing

所有表單都包含同乙個偽隨機值。

這可能是最簡單的解決方案了,因為攻擊者不能獲得第三方的cookie(理論上),所以表單中的資料也就構造失敗了。

這個方法個人覺得已經可以杜絕99%的csrf攻擊了,那還有1%呢….由於使用者的cookie很容易由於**的xss漏洞而被盜取,這就另外的1%。一般的攻擊者看到有需要算hash值,基本都會放棄了,某些除外,所以如果需要100%的杜絕,這個不是最好的方法。

2、驗證碼

這個方案的思路是:每次的使用者提交都需要使用者在表單中填寫乙個上的隨機字串,厄….這個方案可以完全解決csrf,但個人覺得在易用性方面似乎不是太好,還有聽聞是驗證碼的使用涉及了乙個被稱為mhtml的bug,可能在某些版本的微軟ie中受影響。

3、one-time tokens

不同的表單包含乙個不同的偽隨機值。

在實現one-time tokens時,需要注意一點:就是「並行會話的相容」。如果使用者在乙個站點上同時開啟了兩個不同的表單,csrf保護措施不應該影響到他對任何表單的提交。考慮一下如果每次表單被裝入時站點生成乙個偽隨機值來覆蓋以前的偽隨機值將會發生什麼情況:使用者只能成功地提交他最後開啟的表單,因為所有其他的表單都含有非法的偽隨機值。必須小心操作以確保csrf保護措施不會影響選項卡式的瀏覽或者利用多個瀏覽器視窗瀏覽乙個站點。

參考文章:

CSRF攻擊原理及防禦

於 一 csrf攻擊原理 csrf是什麼呢?csrf全名是cross site request forgery,是一種對 的惡意利用,csrf比xss更具危險性。想要深入理解csrf的攻擊特性我們有必要了解一下 session的工作原理。session我想大家都不陌生,無論你用.net或php開發過...

CSRF攻擊與防禦

csrf是乙個偽造使用者請求的操作,所以需要構造使用者請求的所有引數才構成攻擊。表單token通過在請求引數中增加隨機數的辦法來阻止攻擊者獲得所有請求的引數 在頁面表單中增加乙個隨機數為token,每次響應頁面的token都不一樣,從正常頁面提交的請求會包含該token,而偽造者的請求無法獲得該值,...

CSRF攻擊和防禦

csrf攻擊和防禦 csrf 跨站點請求偽造 存在於這樣的情況,乙個宅a登陸b站,輸入了使用者名稱和密碼,通過驗證後,b站產生cookie資訊並返回給瀏覽器。a沒有關閉b站,在同一瀏覽器下開啟了黑客發來的 c,c中隱藏著一段功能為獲取b站cookie的 此時恰巧b站和a的session尚未過期,瀏覽...