CSRF
- CSRF全拼為Cross Site Request Forgery,譯為跨站請求偽造。
- CSRF指攻擊者盜用了你的身份,以你的名義發送惡意請求。
- 造成的問題:個人隱私泄露以及財產安全。
CSRF攻擊示意圖
- 客戶端訪問服務器時沒有同服務器做安全驗證
- 總結一下,簡單的csrf攻擊是通過用戶已經產生cookie的情況且未退出登錄,釣魚網站通過偽造頁面來請求原始網站處理業務,達到模擬用戶操作的目的
防止 CSRF 攻擊
方式一:可以通過驗證碼的手段,因為驗證碼是直接發到用戶的手里,所以黑客破解的成功性不大
方式二:在沒有驗證碼的年代,可以通過生成隨機的token來校驗網站是否正確
步驟
- 在客戶端向后端請求界面數據的時候,后端會往響應中的 cookie 中設置 csrf_token(隨機變化) 的值
- 在 Form 表單中添加一個隱藏的的字段,值也是 csrf_token
- 在用戶點擊提交的時候,會帶上這兩個值向后台發起請求
- 后端接受到請求,以會以下幾件事件:
- 從 cookie中取出 csrf_token
- 從 表單數據中取出來隱藏的 csrf_token 的值
- 進行對比
- 如果比較之后兩值一樣,那么代表是正常的請求,如果沒取到或者比較不一樣,代表不是正常的請求,不執行下一步操作
可能有的人會問,把這么重要的csrf_token放到cookie里不是很不安全嗎,隨便一個F12就可以看到cookie,黑客獲取cookie不照樣可以模擬用戶的行為嗎
注:因為同源策略,即協議,域名,端口都相同的情況下為同源,瀏覽器帶有同源策略,在沒有明確授權的前提下,不同源之間不能進行資源訪問,也就是說釣魚網站無法拿到原始網站的cookie,模擬不了業務處理,這也是為什么我們要把csrf_token放到cookie中,確保網站業務處理時的安全