# 详解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/...
相关推荐
前端小巷子19 分钟前
JS 打造仿腾讯影视轮播导航
前端·javascript·面试
大模型真好玩1 小时前
大模型工程面试经典(五)—大模型微调与RAG该如何选?
人工智能·面试·deepseek
绝无仅有1 小时前
面试之MySQL基础和事务实战经验总结与分享
后端·面试·github
绝无仅有1 小时前
面试经验之MySQL 锁与索引实战总结分享
后端·面试·github
在未来等你5 小时前
Elasticsearch面试精讲 Day 13:索引生命周期管理ILM
大数据·分布式·elasticsearch·搜索引擎·面试
PAK向日葵9 小时前
【C/C++】面试官:手写一个memmove,要求性能尽可能高
c语言·c++·面试
嘉里蓝海10 小时前
我在嘉顺达蓝海的安全日常
安全
2301_7807896610 小时前
渗透测试真的能发现系统漏洞吗
服务器·网络·安全·web安全·网络安全
嘉里蓝海10 小时前
我在嘉顺达蓝海的安全坚守
安全
你的人类朋友12 小时前
认识一下Bcrypt哈希算法
后端·安全·程序员