# 详解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/...
相关推荐
x-cmd5 小时前
[x-cmd] jsoup 1.22.1 版本发布,引入 re2j 引擎,让 HTML 解析更安全高效
前端·安全·html·x-cmd·jsoup
kali-Myon5 小时前
2025春秋杯网络安全联赛冬季赛-day2
python·安全·web安全·ai·php·pwn·ctf
独行soc6 小时前
2026年渗透测试面试题总结-19(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
kali-Myon6 小时前
2025春秋杯网络安全联赛冬季赛-day1
java·sql·安全·web安全·ai·php·web
wwwlyj1233217 小时前
对称加密和非对称加密
安全
kali-Myon7 小时前
2025春秋杯网络安全联赛冬季赛-day3
python·安全·web安全·ai·php·web·ctf
不想秃头的程序员7 小时前
Vue3 封装 Axios 实战:从基础到生产级,新手也能秒上手
前端·javascript·面试
你听得到117 小时前
我彻底搞懂了 SSE,原来流式响应效果还能这么玩的?(附 JS/Dart 双端实战)
前端·面试·github
迎仔7 小时前
05-AI与网络安全
人工智能·安全·web安全
晴殇i8 小时前
【前端缓存】localStorage 是同步还是异步的?为什么?
前端·面试