首页 > 其他分享 >详解csrf(跨站请求伪造)

详解csrf(跨站请求伪造)

时间:2024-05-03 12:11:56浏览次数:25  
标签:跨站 浏览器 请求 网站 详解 cookie 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部署在http://mdd.com:8080/a.html上,在a中访问了接口b,接口b为http://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. https://developer.mozilla.org/zh-CN/docs/Web/Security/Same-origin_policy
  2. https://blog.csdn.net/weixin_59124055/article/details/125253579
  3. https://www.cnblogs.com/ziyunfei/p/5637945.html

标签:跨站,浏览器,请求,网站,详解,cookie,csrf,服务器
From: https://www.cnblogs.com/GD-mdd/p/18171086

相关文章

  • 高效遍历:C++中分隔字符串单词的3种方法详解与实例
     概述:在C++中,遍历由空格分隔的字符串的单词有多种方法,包括使用`std::istringstream`、手动遍历字符和正则表达式。其中,`std::istringstream`是简单高效的选择,通过流提取单词。手动遍历字符较为繁琐,正则表达式方法更灵活但可能有性能开销。根据实际需求选择方法,本文提供了清晰......
  • csrf-基于Pikachu的学习
    CSRF-跨站请求伪造CSRF的原理CSRF攻击即Cross-siterequestforgery,跨站请求伪造,直白来说就是恶意网站伪装成用户,向被害网站发起操作请求。用户输入账号信息请求登录A网站。A网站验证用户信息,通过验证后返回给用户一个cookie在未退出网站A之前,在同一浏览器中请求了黑客构造......
  • Redis持久化、主从与哨兵架构详解
    参考图灵课堂https://zhuanlan.zhihu.com/p/443951927https://blog.csdn.net/weixin_37548768/article/details/124538778?spm=1001.2014.3001.5502https://www.runoob.com/redis/redis-transactions.html   redis支持持久化到磁盘,这样可用进一步保证数据的完整性。re......
  • 前端 Vue-cli中 vue.config.js 的配置详解
    Vue-cli3/Vue-cli4 目录结构├──README.md #说明|--dist #打包后文件夹├──babel.config.js #babel语法编译├──package-lock.json├──public #静态文件夹,这类资源将会直接被拷贝,而不会经过webpack的......
  • 前端 Vue yarn.lock文件:详解和使用指南
    yarn.lock文件:详解和使用指南https://www.python100.com/html/38KF796X6BHM.html一、什么是yarn.lock文件yarn.lock文件是一个产生于Yarn0.22及以后版本的文件,它是一个自动生成的锁文件,记录了当前项目的依赖关系,并确保每个依赖的版本都是稳定的,这样可以保证软件包安装的重......
  • 05.Java 方法详解
    1.方法的定义及调用设计方法的原则:一个方法只完成一个功能,有利于后期的扩展方法的定义:修饰符(可选)返回值类型方法名(参数类型参数名(可选)){方法体return返回值;}2.方法重载重载:就是在一个类中,有相同的函数名称,但形参不通的函数方法的重载规则:方法名称必......
  • 【Qt 专栏】信号与槽详解
    5个重要的结论:1.对于QT,GUI程序设计的逻辑需要4元素:信号、信号发射者、信号接受者、槽。例如,点击按键后,窗口关闭,这四者的关系如下所示: 2.信号函数返回类型为void,不需要实现。参数类型可以重载。调用时前面可以加emit(也可不加),表示信号释放。3.槽函数返回类型也为void,但一......
  • Vue | babel.config.js 配置详解
    babel.config.js 1概述Babel相当于一个中介,一边是用户,另一边是浏览器。这几年,JavaScript发生了很大的变化,许多新特性在很多浏览器里都不支持。Babel的主要作用就是规避这些问题,可以确保JavaScript代码兼容所有的浏览器,比如IE11。2Babel的工作原理Babel使用AST把......
  • tar命令中--exclude参数详解
    tar命令中--exclude参数详解测试环境:[root@osker/]#uname-r3.10.0-957.el7.x86_64[root@osker/]#cat/etc/redhat-releaseCentOSLinuxrelease7.6.1810(Core)[root@osker/]#treetesttest├──t1│  ├──file1.txt│  ├──file2.txt│  └──file3.t......
  • 无线模块空中唤醒技术原理详解
    空中唤醒功能,英文名称为WakeonRadio(WOR),其原理主要是通过减少接收端射频处于接收状态的时间,而在其余时间使设备处于深度睡眠模式,以此来实现设备功耗的显著降低。这种机制确保了设备在不需要接收数据时保持低功耗状态,而在需要接收数据时能够迅速被唤醒至接收状态。具体来说,空......