Web安全之CSRF总结

一、CSRF是什么?

CSRF(Cross-site request forgery)跨站请求伪造,是一种常见的web安全漏洞,概括地说就是指,攻击者通过浏览器保存的Cookie盗用了你的身份,以你的名义给某个网站发送恶意请求,这些恶意请求包括但不限于发邮件、修改账户信息、购买商品、转账等等,如果这个网站没有防御csrf攻击的话,那么这些恶意请求可能会请求成功,从而泄露了个人的隐私安全和财产安全。

二、CSRF的原理

  1. 浏览并登录受信网站WebA。
  2. 验证通过,浏览器端产生WebA的cookie。
  3. 用户在没有登出WebA的前提下访问了危险网站Web。
  4. Web发出一个对WebA的恶意请求。
  5. 根据4中的请求,浏览器带着还未失效的cookie访问WebA。
  6. WebA并不知道该请求是用户发出的还是WebB发出的,当权限校验通过后,WebB就达到了模拟用户操作的目的。

所以,当你在不登出受信网站(即cookie依然有效)的情况下,访问了恶意网站,那么就有可能发生CSRF攻击。

备注:不一定非要访问那些恶意网站,也许会是一个有其他漏洞的受信网站,恶意攻击者也可能会以这个网站作为中间网站实施攻击。

三、CSRF的防御

我们知道了CSRF攻击的原理,就可以做针对性的防御了。CSRF的防御可以从两个方面考虑,一个是后台接口层;另一个则是在前端做防御,这种不同源的请求,不可以带cookie。

后端防御:

后端防御主要是区分哪些请求是恶意请求,哪些请求是自己网站的请求。区分恶意请求的方式有很多。例如:

  1. CSRF Token的方式。这种方式在表单页面生成一个随机数,这个随机数一定要后端生成,并且对这个随机数进行存储。在前端页面中,对这个Token表单项进行隐藏。
  2. 通过请求头中的referer字段判断请求的来源。每一个发送给后端的请求,在请求头中都会包含一个referer字段,这个字段标识着请求的来源。如果请求是从该网站发出的,这个字段会是该网站跳转的链接;如果不是则直接忽略掉这个请求。

前端防御CSRF:

谷歌提出了same-site cookies概念,same-site cookies是基于Chrome和Mozilla开发者花了三年多时间制定的IETF标准。它是在原有的Cookie中,新添加了一个SameSite属性,它标识着在非同源的请求中,是否可以带上Cookie,它可以设置为3个值,分别为:

  • Strict
  • Lax
  • None

Strict是最严格的,它完全禁止在跨站情况下,发送Cookie。只有在自己的网站内部发送请求,才会带上Cookie。不过这个规则过于严格,会影响用户的体验。

Lax的规则稍稍放宽了一些,大部分跨站的请求也会带上Cookie,但是一些导航的Get请求会带上Cookie。

None就是关闭SameSite属性,所有的情况下都发送Cookie。不过SameSite设置None,还要同时设置Cookie的Secure属性,否则是不生效的。

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前路茫茫——何处无香

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值