对CSRF的简单理解

CSRF(Cross-site request forgery,跨域请求伪造)

前言

CSRF是一种安全问题:攻击者盗用你的身份(客户端获取的cookie)想第三方网站发送请求,进行非法操作。

一、CSRF的过程

以访问银行网站为例:

  1. 用户User访问银行网站,登录成功后,客户端生成相应cookie。
  2. 在User未登出的情况下访问了危险网站B,在网站B中触发了一个请求,如点击图片,该图片src向银行发起转账请求。由于User未登出,在网站B向银行发送请求时,会携带cookie。
  3. 银行后台响应请求,完成非法操作。
    在这里插入图片描述

二、如何防御CSRF攻击

1.验证 HTTP Referer 字段

HTTP Referer 字段它记录了该 HTTP 请求的来源地址。服务器端可以验证请求的来源,若同源则响应。但是,HTTP Referer 字段可以被修改,因此并不安全。

2.使用验证码

在客户端使用验证码可以有效防止CSRF攻击。

3.使用token验证

这个Token的值必须是随机的。由于Token的存在,攻击者无法再构造一个带有合法Token的请求实施CSRF攻击。

三、cookie和token的区别

cookie

  • cookie是有状态的,服务器端保存的sessionID与cookie中的sessionID做对比,相同则认证成功。
  • 当浏览器发送http请求时会自动将cookie携带上,这就造成了CSRF风险。
  • 由于服务器端要保存sessionID,因此分布式的服务器不能共享sessionID。

token

token是用来认证(用户)和授权(APP)的;是令牌,访问资源接口(API)时所需要的资源凭证。

  • token是无状态的,客户端发送请求,服务器端生成token返回给客户端。
  • 客户端可以将Token保存在cookie中也可以保存在localStorage中。客户端下次请求时可以把token放在在Header中的Authorization字段发送给服务器。
  • 服务器端不需要保存sessionID,只需要通过对token使用秘钥进行解密获取用户信息,若得到的签名有效则可以进行下一步逻辑处理。
  • 因为不会像cookie一样自动随请求发送给服务端,因此可以避免CSRF攻击。
  • 可以在分布式服务器中共享一个token,还可以应用在移动端APP中。
token的生成原理

什么是token

四、设置cookie的samesite属性

Chrome51开始,浏览器设置了一个新的samesite属性用来防止CSRF攻击。

samesite

samesite用来限制第三方cookie,可以设置三个值:

  • Strict
  • Lax
  • None

Strict最严格,只有当站点URL与请求站点相同时才会携带cookie

Lax是默认值,大多数情况也是不发送第三方 Cookie,但是导航到目标网址的 Get 请求除外。

在这里插入图片描述
参考博文:
[1]: http://www.ruanyifeng.com/blog/2019/09/cookie-samesite.html
[2]: http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值