防御CSRF攻擊的幾種方式
1.盡量采用post,少用get
該方法的局限性比較大,只能在一定程度上防御CSRF攻擊,現(xiàn)在已經(jīng)基本不采用此方式。
2.設(shè)置refer
這種方式是利用設(shè)置refer,來限制訪問服務(wù)器的站點,只允許與refer設(shè)置的站點相同的網(wǎng)站才能訪問服務(wù)器。這種方式也有比較大的局限性,因為在某些低版本的瀏覽器中,refer是可以被篡改的,所以說也不安全。
3.驗證碼
這個方式是最徹底最簡單的方式了,每次訪問的時候都要輸入驗證碼,簡單粗暴,完全能夠防御CSRF帶來的攻擊。但是缺點就是影響用戶體驗,每次都要輸入驗證碼太惡心了,所以說我們只在比較重要的請求的地方設(shè)置驗證碼。
4.token驗證
這是現(xiàn)在用的最多的一種方式了,用戶登錄成功之后,服務(wù)器將用戶信息自動生成一個token返回給客戶端,同時也將這個token信息保存在服務(wù)器的某個地方(現(xiàn)在一般都是保存在redis中),客戶端需要將這個token保存起來,一般是放在cookie或者sessionStorage中,以后只要再次請求的時候,都會從客戶端保存token的地方取出token,并且?guī)蟭oken去訪問服務(wù)器,服務(wù)器端token驗證不通過的話就拒絕訪問,這是目前使用最多的一種防御CSRF攻擊的方式。
5.自定義header
自定義header是第四種方式的一種擴展,它是把客戶端取出來的token放到請求頭中,然后服務(wù)器通過驗證請求頭的token信息。下面是一個例子:


通過上面兩個圖片你可以明顯看到當(dāng)發(fā)送請求的時候,會先從cookie中取出token放入請求頭的Authorization中,這也就是我們常說的權(quán)限驗證,來解釋一下為什么這樣做可以防御csrf攻擊。因為偽造請求都是通過一些沒有跨域限制的標簽來偽造的,他們是無法給自己添加請求頭的,所以說雖然他們可以正常的讓瀏覽器攜帶cookie,但是無法添加我們手動設(shè)置的請求頭,自然也就不會驗證通過。這篇文章就到這里了,下一篇準備講一下http請求阻塞的問題