纯白话理解CSRF和JWT为什么可以防止CSRF

什么是CSRF?

  • 专业解释:跨站请求伪造(Cross-site request forgery),也被称为 one-click attack 或者
    session riding,通常缩写为 CSRF 或者 XSRF,是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。

  • 通俗易懂的例子: 就是我在一个安全的官方网站点了别人的一个恶意链接,由于我在安全网站的登录还没过期,或者是还没登出,我点这个恶意链接的时候是会携带浏览器中的cookie一起发给恶意链接的后端服务器的,恶意链接的后端就根据我发过去的cookie,拿到存在cookie中的sessin_Id,然后他这个恶意的后端伪造一个url请求,url里面带了一个刚刚拿到的session_id和一些业务参数,去正规网站里面用我的身份去进行一些操作,比如转账等,这就是一次跨域攻击。

JWT为什么可以防止CSRF呢?

  • 因为JWT是由正规安全官网的后端生成的,我登录正规网站,正规网站的后端有一个用于生成JWT签名的密钥,先生成一个head,里面放type=jwt,alg(加密算法)=HS256,再将要传递的数据放到payload里面,第三步使用head中定义的加密算法和后端已经设置好的加密密钥,将head+payload这两部分加密生成一个signature签名,前面三步得到的数据加起来生成一个JWT令牌。也就是说,JWT令牌是由正规网站的后端生成的,用户在第一次登陆这个网站并登陆成功以后,后端就会返回一个JWT给用户,这个JWT存在用户浏览器的localStorage本地缓存里面,下次这个用户发送请求给正规网站的后台时,就会把这个JWT发给正规网站的后台,根本就用不到cookie,但,还是回到上面那个例子,我在正规网站上点了一个恶意链接,并且传递了cookie给恶意链接的后台,此时恶意链接的后台伪造了一个请求发给了正规网站的后台,由于恶意链接的后台本地存储里面没有我与正规网站约定的那个JWT令牌,因此,恶意链接后台生成的发送到正规网站后台的请求就不会带上JWT,就会被正规网站的后台判断为是非法请求,然后抛弃。

知识补充

  • JWT的组成:
    Copy自JavaGuide
  • JWT身份验证的步骤:
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值