csrf防御 java_一分钟了解【CSRF攻击与防御】

含义

跨站请求伪造(英语:Cross-Site Request Forgery),简称CSRF。是指网站在用户不知情的情况下,引导用户请求外部URL。

实例

用户首先登录B网站,然后打开A网站(恶意网站),A通过Script标签加载了一个B网站的URL,由于用户登录了B网站,该URL刚好是一个写数据的接口,就会造成数据损失。

e940f32aaed8ff39f748253589e91bf7.png

防御方式

根据上面的实例,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攻击。所以,我认为最可靠的方式还是校验登录密码,这是用户自身安全级别最高的数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值