《Web漏洞防护》读书笔记——第12章,CSRF跨站点请求伪造防护

《Web漏洞防护》读书笔记——第6章,CSRF跨站点请求伪造防护
在这里插入图片描述

CSRF介绍

一种欺骗受害者提交而已请求的攻击行为,会以用户的权限执行恶意操作。

站点如果已经完成了相关的认证,则服务端无法区分通过浏览器发来的请求究竟是用户发送的合法请求,还是受欺骗后发送的非法请求。

攻击的核心是利用浏览器对于站点的信任。

CSRF的分类

1.GET型CSRF:
构建超链接,发送给用户,引诱用户点击,也可以通过标签的方式构造超链接,让用户点击按钮。
如:
点我有惊喜哦!
< a href=“http://abc.csrf?param1=xxx&param2=xxx”>点我有惊喜哦!

构造自动发送请求的标签,如标签,用户对于这种攻击是无感知的,成功的可能性大:
< img src=“http://example.csrf?param1=xxx&param2=xxx” width=“10” height=“10” border=“10”>

2.POST型CSRF:
无法通过向用户发送URL地址、标签等方式进行攻击,使用post请求并不能够真正防御CSRF攻击。

攻击者可以构造FORM表单的方式,诱骗用户点击按钮,触发表单来发送POST请求。

CSRF结合XSS

使用反射性XSS漏洞,向CSRF漏洞页面上提交一条评论。
第一个过程是触发反射型XSS漏洞,用户拿到了有恶意CSRF的脚本。
第二个过程是恶意CSRF脚本被启用,像目标站点发起了非用户意愿的恶意请求。
XSS——作用于客户端(造成客户端开始发送非主人意愿的请求)
CSRF——作用于服务端(造成服务端的状态发生改变)

CSRF防护

在一定程度上防御CSRF攻击的方法:
1.仅接受POST请求
2.URL重写
3.使用JSON或XML提交请求数据

正确的CSRF防护方式:
1.验证请求同源
请求源的选择:一般情况下,将Origin头作为请求源的首选,如不存在,则使用Referer头作为请求源。
目的源的选择:一般使用URL中的Host、Port作为目的源。
请求源和目的源两个值的校验。

2.CSRF Token
服务端保存会话状态,为当前会话设置一个随机值,存储于服务端的Session中,通过隐藏域的方式嵌入到HTML页面中。
当客户端发起敏感请求时,需要携带这个随机值,服务端收到请求会先校验Token,看是否匹配。
如果匹配就接受用户的请求,反之则拒绝。
Token具有随机性,攻击者无法预测。
Token具有时效性,应该2分钟以内,客户端向服务端请求新的Token,保持Token的新鲜。

使用ESAPI和Spring Security工具产生CSRF Token。

也可以自定义CSRF的防护工具。

前后端分离问题

前端负责HTML渲染和用户交互
后端负责向前端提供数据。
有时为了解决效率及跨域的问题,会添加一个中间层,如使用Node.js实现。会导致之前添加Token的方式不再适用,为了解决这个问题,需要在服务端构造一个特殊的接口,通过这个接口,向客户端的请求返回防御CSRF的Token值。客户端请求该接口获得Token值,将它存储到前端页面中,每次向服务端发情请求的时候都会读取该Token值,插入到POST请求参数说HTTP头中,发送至服务端,服务端校验该值,从而确定是否接受该请求。

小结

目前最尝使用的CSRF防护方式为加密令牌Token。需要结合自身业务,设计符合业务特点的加密令牌防护方案。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值