Anti CSRF Token:CSRF攻擊之所以能夠成功,主要是因為黑客能夠完全偽造用戶的請求,在這次請求中,用戶的信息是存在cookie中的,所以黑客可以在不知道這些驗證信息的情況下直接利用用戶的cookie去跳過安全認證,我們要防御CSRF關鍵在于請求放入的時候黑客不能去偽造信息,并且這個信息不存在cookie之中,所以我們就可以在通過http的請求中或者是頭信息中加入一個隨機產生的token,這個token就會存在服務端,通過攔截器去驗證這個token,如果請求頭中不存在token或者token不正確,攔截器就會認為這是一次CSRF攻擊,拒絕此次請求。
狹義的CSRF是指在黑客已經將代碼植入受害用戶的瀏覽器訪問的頁面的前提下,以“受害用戶”的身份向服務端發起一個偽造的http請求,從而實現服務器CURD來執行讀寫操作,狹義的CSRF的原理很簡單,實現難度也不大,無非就是寫兩行javascript代碼的ajax調用一下服務端的rest接口,難度難在這么去找到XSS漏洞然后這么將惡意代碼植入。
以下是一些常見的防御手法:
盡量使用POST請求:get請求太容易被利用,攻擊者可以構造一個img標簽,通過圖片資源嵌入惡意操作,而img又不能被過濾掉。所以接口最好限制為POST請求
加入驗證碼:POST請求也不是絕對安全的,攻擊者可以通過內嵌框架,構建隱藏表單,當我們訪問這個網站時候,就自動將這個表單提交了,從而造成了一次CSRF的攻擊。所以這時候我們可以采用加入驗證碼的方式,因為攻擊者所構造出來的就是偽的請求,所以在某一次提交時候,讓用戶提交驗證碼,或者滑塊驗證,能夠確保這是一次用戶的行為,而非黑客行為。
驗證Referer:http頭存在一個字段Referer,它能夠記錄當前一次請求的來源地址。什么意思呢,當我們訪問正常網站時候,調用了某個接口例如192.108.12.88/transferxxxxx ——>而攻擊者構造的偽請求地址113.132.44.53/gg.html 由于攻擊者對正常網站實施CSRF攻擊他只能在自己的站點里面進行構造請求,所以當Referer傳過來是跟當前網站不同的域名,經過后端判斷,如果Referer的值不是當前的網頁就拒絕此次請求。
Anti CSRF Token:CSRF攻擊之所以能夠成功,主要是因為黑客能夠完全偽造用戶的請求,在這次請求中,用戶的信息是存在cookie中的,所以黑客可以在不知道這些驗證信息的情況下直接利用用戶的cookie去跳過安全認證,我們要防御CSRF關鍵在于請求放入的時候黑客不能去偽造信息,并且這個信息不存在cookie之中,所以我們就可以在通過http的請求中或者是頭信息中加入一個隨機產生的token,這個token就會存在服務端,通過攔截器去驗證這個token,如果請求頭中不存在token或者token不正確,攔截器就會認為這是一次CSRF攻擊,拒絕此次請求。
回答所涉及的環境:聯想天逸510S、Windows 10。