CSRF攻击原理与防御措施

CSRFCross-Site Request Forgery),中文名称:跨站请求伪造,缩写为:CSRFXSRF,它是一种对网站的恶意利用,和XSS不同的是,XSS是利用站点内的信任用户,而CSRF则是通过伪装来自受信任用户的请求来利用受信任的网站

可以这么理解:攻击者盗用了你的身份,以你的名义向第三方网站发送恶意请求。

CSRF能做的事情包括利用你的身份发短信、邮件,进行转账交易,甚至盗取你的账号等。

图片来源于网络:

 

XSS攻击原理/过程:

假设某银行网站AGET请求来发起转账握作,转账的地址为www.xxx.com/transfer.do?account={你的账号}&money={转账金额}

而某论坛B上,一个恶意用户上传了一张图片,而图片的地址栏中填的并不是图片的地址,而是上面这个转账地址。

<img src="http://www.xxx.com/transfer.do?accountNum=123&money=100000000">

当你登录网站A后,没有及时登出,这时你访问了论坛B,并点击了这张图片,不幸的事情发生了,你会发现账户里面少了1个小目标……

为什么会这样呢?在你登录银行A时,你的浏览器端会生成银行Acookie,而当你访问论坛B中这张恶意图片时,页面上的<img>标签需要浏览器发起一个新的HTTP请求,以获得图片资源,当浏览器发起请求时,请求的却是银行A的转账接口,并且会带上银行Acookie信息,结果银行的服务器收到这个请求后,会认为是你发起的一次转账操作,因此接口请求成功。

当然,绝大多数网站都不会使用GET请求来进行数据更新,因此,攻击者又改进方案:

假设银行将其转账方式改成POST提交,而论坛B恰好又存在一个XSS漏洞,恶意用户在它的页面上植入如下代码:

<form id="aaa" action="http://www.xxx.com/transfer.do" method=“POST" display="none">

  <input type="text" name="account" value="123"/>

  <input type="text" name="money" value="100000000"/>

</form>

<script>var form = document.forms['aaa’];   form.submit();</script>

CSRF防御措施:

1. Cookie设置为HttpOnly

response.setHeader(“Set-Cookie”, “cookiename=cookievalue;HttpOnly”);

2. 使用JWT token进行会话

3. 通过Refer识别

HTTP请求头中有一个属性叫Refer,记录了该HTTP请求的来源地址。后台获取请求头中的Refer的值,判断是否是本网站域名,如果不是就有可能是CSRF攻击,则拒绝该请求。

Spring Security中对CSRF的处理可参考如下文章: Spring Security系列(9)-CSRF详解_云烟成雨TD的博客-CSDN博客_csrf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值