CSRF攻击

本文深入探讨了CSRF(跨站请求伪造)攻击的原理,包括用户如何成为媒介,恶意站点如何利用令牌进行攻击。同时,介绍了多种防御策略,如设置cookie的SameSite属性、验证referer和Origin、使用非cookie令牌、验证码以及表单随机数等。此外,还讨论了二次验证在敏感操作中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CSRF 特点和原理

CSRF:Cross Site Request Forgery,跨站请求伪造

本质是:恶意网站把正常用户作为媒介,通过模拟正常用户的操作,攻击其登录过的站点。

它的原理如下:

  1. 用户访问正常站点,登录后,获取到了正常站点的令牌,以cookie的形式保存

  2. 用户访问恶意站点,恶意站点通过某种形式去请求了正常站点(请求伪造),迫使正常用户把令牌传递到正常站点,完成攻击

防御

cookie的SameSite

现在很多浏览器都支持禁止跨域附带的cookie,只需要把cookie设置的SameSite设置为Strict即可

SameSite有以下取值:

  • Strict:严格,所有跨站请求都不附带cookie,有时会导致用户体验不好
  • Lax:宽松,所有跨站的超链接、GET请求的表单、预加载连接时会发送cookie,其他情况不发送
  • None:无限制

这种方法非常简单,极其有效,但前提条件是:用户不能使用太旧的浏览器

验证referer和Origin

页面中的二次请求都会附带referer或Origin请求头,向服务器表示该请求来自于哪个源或页面,服务器可以通过这个头进行验证

但某些浏览器的referer是可以被用户禁止的,尽管这种情况极少

使用非cookie令牌

这种做法是要求每次请求需要在请求体或请求头中附带token

请求的时候:authorization: token

验证码

这种做法是要求每个要防止CSRF的请求都必须要附带验证码

不好的地方是容易把正常的用户逼疯

表单随机数

这种做法是服务端渲染时,生成一个随机数,客户端提交时要提交这个随机数,然后服务器端进行对比

该随机数是一次性的

流程:

  1. 客户端请求服务器,请求添加学生的页面,传递cookie
  2. 服务器
    1. 生成一个随机数,放到session中
    2. 生成页面时,表单中加入一个隐藏的表单域<input type="hidden" name="hash" value="<%=session['key'] %>">
  3. 填写好信息后,提交表单,会自动提交隐藏的随机数
  4. 服务器
    1. 先拿到cookie,判断是否登录过
    2. 对比提交过来的随机数和之前的随机数是否一致
    3. 清除掉session中的随机数

二次验证

当做出敏感操作时,进行二次验证

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值