1. 程式人生 > >跨站點請求偽造(CSRF)學習

跨站點請求偽造(CSRF)學習

一、CSRF介紹

偽造一個站點,在站點中偽造一個向其他站點的請求,在使用者訪問該站點時讓使用者執行

假設有如下URL能刪除一篇文章:

攻擊者在自己的域中構造一個頁面:

內容為:

使用一個img標籤,其地址指向了刪除部落格文章的連結

在使用者訪問該站點的時候,使用者看到了一張無法顯示的圖片,並且使用者刪除了該文章

這個刪除部落格文章的請求,是攻擊者偽造的,所以這種攻擊就被叫做“跨站點請求偽造”

二、CSRF進階

2.1 Cookie策略

Cookie分類:

1、Session Cookie:又稱為臨時Cookie,在瀏覽器關閉之後,就消失。儲存在瀏覽器的記憶體空間

2、Thrid-party Cookie:又稱為本地Cookie,在伺服器設定該類Cookie時,會指定一個Expire時間,代表失效時間。儲存在本地

IE預設禁止在<img><iframe><script><link>等標籤中傳送第三方Cookie,但Firefox會,所以上一節的攻擊多半發生在Firefox之上。如果IE等需要攻擊成功,還需要引誘使用者訪問目標網頁得到Session Cookie

2.2 P3P頭的副作用

如果網站返回給瀏覽器的HTTP頭中包含有P3P頭,即使是IE,也將允許瀏覽器傳送第三方Cookie,

2.3 GET?POST?

不一定只能通過<img><iframe><script>等發起get請求,也能通過POST,比如在頁面中構造好一個form,然後使用javaScript自動提交這個表單。

2.4 Flash CSRF

使用Flash也能使用一些方式來發送網路請求,帶上本地Cookie

2.5 CSRF Worm

在使用者訪一個惡意頁面後,向其他好友傳送一條短訊息,然後這條短訊息又包含一張圖片,其地址又指向CSRF頁面,是的這些好友再次將訊息傳送給他們的好友

三、CSRF的防禦

3.1 驗證碼

CSRF攻擊的過程,就是在使用者不知情的情況下構造了網路請求。二驗證碼可以強制與使用者進行互動,防止CSRF。

但是很多情況出於使用者體驗,不能給所有的操作都加上驗證碼。

3.2 Referer Check

網際網路應用中,頁面都具有一定的邏輯關係,通過檢查這種邏輯關係來防止CSRF

缺陷在於,伺服器並非什麼時候都能獲取到Referer

3.3 Anti CSRF Token

CSRF之所以能成功,是因為重要操作的所有引數都是可以被攻擊者猜測到的。

可以將明文的引數改為hash或是其他方式,讓攻擊者無法直接猜測出引數。問題就是URL每次都會變,無法收藏。通過CSRF Token可解決

在URL中新增一個Token,這個Token是隨機的:

在實際應用中,Token可以放在使用者的Session中,或者瀏覽器的Cookie中。

 使用Token的原則是不可預測性原則,需要保證保密性和隨機性