csrf防御 java_一分钟了解【CSRF攻击与防御】
含義
跨站請求偽造(英語:Cross-Site Request Forgery),簡稱CSRF。是指網站在用戶不知情的情況下,引導用戶請求外部URL。
實例
用戶首先登錄B網站,然后打開A網站(惡意網站),A通過Script標簽加載了一個B網站的URL,由于用戶登錄了B網站,該URL剛好是一個寫數據的接口,就會造成數據損失。
防御方式
根據上面的實例,A是攻擊網站,B是被攻擊網站。這種攻擊的特殊之處就在于,用戶側很難感知到自己被“綁架”做了一個“可怕”的操作。這就是為什么我們不能隨便打開一個陌生的網站。
我們從B網站的角度來分析,如何避免CSRF攻擊。由于請求是從A網站發起的,所以服務端只要能識別請求是來自B網站自身,就能阻止這樣的攻擊。
最簡單的辦法,我們可以校驗請求的來源,也就是Referer,來判斷請求是否來自B網站。不過這種方式并不可靠,因為Referer是瀏覽器傳遞的,不能保證絕對的可靠性。
if (strpos($_SERVER['HTTP_REFERER'], 'www.test.com') === false) {
// CSRF攻擊
return;
}
另外一種辦法是B網站在請求服務端時讓用戶輸入密碼,服務端先對密碼進行校驗。A網站不知道密碼,自然也就束手無策了。這種方法,可以很好地防御CSRF攻擊。
$.post(url, {
password:"輸入密碼"
});
有些網站采用的是用戶在登錄B網站后生成一個秘鑰存儲到cookie中,或者是在需要的時候調用一個接口獲取秘鑰,請求URL的時候帶上這個秘鑰。這種方式也是可行的,但是存儲到cookie中就有被竊取的風險,使用單獨的接口獲取秘鑰,這個接口本身也有可能被CSRF攻擊。所以,我認為最可靠的方式還是校驗登錄密碼,這是用戶自身安全級別最高的數據。
總結
以上是生活随笔為你收集整理的csrf防御 java_一分钟了解【CSRF攻击与防御】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 下载处于挂起状态_即使脚本执行
- 下一篇: java 折线动图_在java中使用jf