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