# 详解csrf(跨站请求伪造)

1.什么是csrf (csrf攻击原理)?

  1. 用户正常访问A网站,A网站设置cookie被用户浏览器保存
  2. 用户不关闭浏览器,直接访问恶意网站,该恶意网站内隐藏式内嵌了A网站接口的请求链接
  3. 触发该请求链接,自动携带浏览器保存的cookie,请求成功。

2.涉及的基础知识

我们先梳理下上面所涉及的一些基础知识。

1.Cookie

因为http请求是无状态的,他不能保存任何信息,但在很多场景下,都需要保存状态,因此就出现了cookie。后端通过set-cookie,浏览器就会将该cookie进行保存,当再次请求该服务器时,会自动携带cookie,针对于cookie有几个需要注意的地方。

  1. cookie是浏览器自动携带的,只要请求该服务器就会携带上该服务器域名下保存的cookie

    这也是为什么第三方网站代码中内嵌了请求服务器的链接后,访问该链接会自动携带浏览器保存的cookie。

  2. 通过使用js对cookie的读写操作是有限制的,需要是和服务器同域名

    在无登录页的项目中,可以利用这条规则,使用js读取浏览器保存的cookie,然后和后端协商截取cookie一部分作为csrf-token,后端接收到请求后使用相同的截取规则截取cookie和请求头中的csrf对比,判断是否一致。

2.浏览器的同源策略限制

MDN:同源策略是一个重要的安全策略,它用于限制一个源的文档或者它加载的脚本如何能与另一个源的资源进行交互。

如果协议(http,https..),主机,端口号都相同,就是同源,同源策略属于浏览器的行为策略,这也意味着如果你访问的接口跨域了,这个请求就不会到达接口服务器,在浏览器就被截获了。

举个例子:a.html部署在mdd.com:8080/a.html上,在a中访问了接口b,接口b为mdd2.com:8080/getinfo ,a和b的主机号不相同,这样就算是跨域

同源策略?
  • 使用xhr(axios,ajax)等获取网络资源的会触发同源策略
  • 使用script,img,link等标签加载资源不受同源策略限制,有些恶意网站就是在这类标签的链接地址中发起发起请求。

3.csrf预防方案

1. Referert头部校验

csrf主要是第三方网站拿着浏览器保存的cookie去访问服务器,如果我们告诉服务器发起请求的页面地址,让服务器判断是否为第三方网站是否需要给其访问权限是不是就可以了。这就使用到了http头中的referert字段 ,这个字段标识了发送请求的客户端地址,后端可以通过白名单等方式对请求进行限制。

2.csrf-token(推荐)

在登录页登录成功后,后端返回一个csrf-token,将该值保存起来,后面的请求前端都将这个token放的请求头中,后端只需要对该值进行校验。

3.SameSite属性

SameSite是专门为解决csrf增加的http头部属性字段,该属性有三个属性值

  • samesite=none

  • samesit=lax

    宽松模式,允许部分第三方网站请求携带cookie

    • a,link标签
    • get读取请求
  • samesit=strict

    严格模式,在任何情况下都不会被第三方网站链接携带

参考文章:

  1. developer.mozilla.org/zh-CN/docs/...
  2. blog.csdn.net/weixin_5912...
  3. www.cnblogs.com/ziyunfei/p/...
相关推荐
CCPC不拿奖不改名11 分钟前
python基础面试编程题汇总+个人练习(入门+结构+函数+面向对象编程)--需要自取
开发语言·人工智能·python·学习·自然语言处理·面试·职场和发展
填满你的记忆32 分钟前
【从零开始——Redis 进化日志|Day7】双写一致性难题:数据库与缓存如何不再“打架”?(附 Canal/读写锁实战)
java·数据库·redis·缓存·面试
绿蕉44 分钟前
生命线上的新国标:GB 45672-2025如何为汽车安全筑起一道“数字防线”?
安全·汽车
无名的小三轮1 小时前
华为eNSP中USG6000防火墙web界面登录设置
网络·笔记·安全·web安全·华为
码界奇点1 小时前
基于前后端分离架构的智能面试刷题系统设计与实现
spring boot·面试·职场和发展·架构·毕业设计·源代码管理
小毅&Nora2 小时前
【Java线程安全实战】⑭ ForkJoinPool深度剖析:分治算法的“智能厨房“如何让并行计算跑得更快
java·算法·安全
GSDjisidi2 小时前
正社員・個人事業主歓迎|GSD東京本社で働こう|業界トップクラスの福利厚生完備
开发语言·面试·职场和发展
阿拉伯柠檬2 小时前
网络层协议IP(二)
linux·网络·网络协议·tcp/ip·面试
合新通信 | 让光不负所托2 小时前
两相浸没式液冷中,冷却液沸腾产生的气泡会不会干扰光模块的正常工作?
网络·安全·云计算·信息与通信·光纤通信
柏林以东_3 小时前
线程安全的数据集合
java·开发语言·安全