跨站點請求偽造(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的原則是不可預測性原則,需要保證保密性和隨機性