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