第4章 跨站點請求僞造(CSRF)
Cross Site Request Forgery
4.1 CSRF簡介
舉例,攻擊者僅僅誘使用戶訪問了一個頁面,就以該用戶的身份在第三方站點裏執行了一次操作(刪除了搜狐博客上的一篇文章)。
4.2 CSRF進階
4.2.1 瀏覽器的Cookie策略
- 瀏覽器所持有的Cookie分爲兩種:
- Session Cookie,又稱“臨時Cookie”
- 沒有指定Expire時間,瀏覽器關閉後,Seesion-Cookie就失效了。
- 保存在瀏覽器的內存空間中
- Third-party Cookie,又稱“本地Cookie”
- 服務器在Set-Cookie時指定了Expire時間,這種Cookie會保存在本地。
- 保存在本地
- Session Cookie,又稱“臨時Cookie”
4.2.2 P3P頭的副作用
- P3P Header,The Platform for Privacy Preference.
- 如果網站返回給瀏覽器的HTTP頭中包含有PSP頭,則在某種程度上來說,將允許瀏覽器發送第三方Cookie。
- GET & POST
- Flash CSRF
- CSRF Worm
4.3 CSRF的防禦
4.3.1 驗證碼
4.3.2 Refer Check
4.3.3 Anti CSRF Token
現在業界針對CSRF的防禦,一致的做法是使用一個Token
- CSRF的本質
- CSRF攻擊成功的本質原因是,重要操作的所有參數都是可以被攻擊者猜測到的。
- 攻擊者只有預測出URL的所有參數與參數值,才能成功地構造一個僞造地請求。
- 解決方案
- 把參數加密,或者使用一些隨機數,從而讓攻擊者無法猜測到參數值。
- 存在問題
- 加密/混淆後的URL非常難讀,對用戶非常不友好。
- 如果加密的參數每次都改變,則某些URL將無法被用戶收藏。
- 參數被加密或哈希,會給數據分析工作造成很大的困擾。
- 解決方案
- 更通用的解決方案:Anti CSRF Token
- Token需要被同時放在表單和Session中。
- 要注意Token的保密性和隨機性。
4.4 小結
CSRF攻擊是攻擊者利用用戶的身份操作用戶賬戶的一種攻擊方式。