CSRF簡介
- CSRF(Cross-site request forgery 跨站請求僞造)又稱是 XSRF, 也被稱爲 "One Click Attack"或 “Session Riding”, 此漏洞是利用了網站對用戶的瀏覽器信任
攻擊細節
- 當用戶打開某網站且登錄後瀏覽器會與網站產生一個會話, 用戶可以利用自己的賬號權限對網站進行一系列操作 如 訂單創建, 支付, 取消, 修改信息 等, 攻擊者可以預先寫好相關請求代碼 如 簡單超鏈接形式或 form表單 等, 通過誘騙用戶點擊或提交, 此時如果會話未過期, 用戶便以自己的身份執行了一個非本意的操作, 對網站服務器來講這個請求是完全合法的, 這樣完成一次 CSRF攻擊, 可以看出 CSRF攻擊是建立在瀏覽器與 WEB服務器的會話之中的
CSRF漏洞檢測
- 一般使用檢測工具掃描 CSRF漏洞, 在通過工具生成攻擊代碼, 以此嘗試 CSRF攻擊, 常見的漏洞掃描工具有 AppScan, NetSpark, AWVS, CSRF Request Builder, CSRFTester 等, 攻擊代碼可以通過 BurpSuite或 CSRFTester工具來生成
CSRF防禦方案
-
驗證 HTTP協議的請求頭中的 Referer值, 它記錄了 HTTP請求的來源地址, 在通常情況該地址是同一個網站地址, 而大部分 CSRF攻擊是在其它網站發起的所以 Referer地址也是發起方地址, 所以可以做判斷同一個地址請求通過否則拒絕, 或需要允許其它發起地址可以做白名單. 不過事實上, 一些瀏覽器黑客可以篡改 Referer值, 所以這種方法仍然有問題, 還有有些用戶認爲這樣會侵犯到自己的隱私權, 因此, 會在瀏覽器設置請求時不再提供 Referer值, 導致即使正常訪問服務器也會認爲是 CSRF攻擊, 且拒絕訪問
-
CSRF漏洞是攻擊者利用用戶存在 Cookie的驗證信息來通過安全驗證的, 所以我們防禦時可以在參數中加入一個隨機產生的 token存放於 Session中, 且不存於 Cookie中, 讓黑客無法僞造參數, 然後請求時在服務器首先會比對 token是否正確, 如果 token不正確就把此次請求視爲 CSRF攻擊, 並拒絕該請求. 此種方式比較繁瑣, 因爲每次請求都需要加 token參數到請求地址中或表單中
-
HTTP 請求頭中添加自定義屬性的方法來防禦 CSRF攻擊, 瀏覽器會阻止向外站發送自定義的請求頭, 但是允許向本站通過 XMLHttpRequest的方式發送自定義請求頭, 所以網站內所有的請求裏使用 XMLHttpRequest類並附加一個自定義請求頭 X-Requested-By, 可以把方式[2]的 token值統一放到此屬性中傳輸驗證, 在每次請求時如果沒有自定義頭會認爲是 CSRF攻擊, 且拒絕訪問
如果您覺得有幫助,歡迎點贊哦 ~ 謝謝!!