csrf漏洞原理及防御

news2024/10/5 16:20:09

攻击原理

从上图可以看出,要完成一次CSRF攻击,受害者必须依次完成两个步骤

1.登录受信任网站A,并在本地生成Cookie

2.在不登出A的情况下,访问危险网站B

防御原理

csrf能防御的本质是,黑客虽然携带了合法的cookie,但是他不知道带了什么,也没有跨域权限读取网页的任何信息,而网站可以。

1. 判断请求来源

•The Referer header (防火墙,浏览器插件或处于隐私策略会被删除)

•The Origin header (老版本浏览器不支持)

2.表单token验证,在提交表单的请求中添加token参数,后台验证(token需要存储在服务器端,占用内存资源)

3.重复携带token验证,提交请求时前端取到token(可放在页面中或cookie中),后台只需要对比提交的参数和cookie中的token是否相等即可。

未来浏览器的防御方式

通过设置cookie的SameSite属性,来限制请求是否携带cookie,关于samesite的说明如下图

落地措施

前端代码

csrf_token可放在meta,页面,cookie中都可以

1. 表单提交,把csrf_token值放在隐藏域即可

2. 简单get请求,csrf_token拼接到url参数中即可

3. AJax请求:

  • jQuery:

$(“body”).bind(“ajaxSend”, function(elm, xhr, s){

If(csrf_token)

xhr.setRequestHeader(‘X-CSRF-Token’, csrf_token);

});

  • axios:

设置axios.defaults属性即可:

xsrfCookieName: ‘XSRF-TOKEN’, // default

xsrfHeaderName: ‘X-XSRF-TOKEN’, // default

  • Fetch API(如果可以使用Fetch,那肯定可以使用orgin判断来源,这样更好)

•const getHeaders = () => {

• let headers = new window.Headers({

• ‘Content-Type’: ‘application/json’,

• ‘Accept’: ‘application/json’,

• ‘X-Requested-With’: ‘XMLHttpRequest’

• })

• const csrfToken = document.head.querySelector(“[name=‘csrf-token’]”)

• if (csrfToken) { headers.append(‘X-CSRF-Token’, csrfToken) }

• return headers

•}

•export const createRequest = (url, method = ‘get’) {

• const request = new window.Request(url, {

• headers: getHeaders(),

• method: method,

• credentials: ‘same-origin’,

• dataType: ‘json’

• })

• return request

•}

后台代码(此处只描述逻辑)

if(Referer存在且不在白名单) retrun “非法”

if(Origin存在且不在白名单) retrun “非法”

if(对比header中的X-CSRF-Token和cookie中X-CSRF-Token的值,不等) retrun “非法”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/136231.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

振弦采集模块的辅助功能寄存器

振弦采集模块辅助功能寄存器 1.频率值模拟量输出 VMXXX(仅 VM501、 VM511) 模块支持将当前实时频率值以模拟量形式从管脚输出,模拟量有电流和电压两种输出形式。为了使用此功能,需要将辅助功能寄存器 AUX.[0]设置为 1&#xff0…

<Linux开发> ubuntu开发工具-EasyConnect使用记录

<Linux开发> ubuntu开发工具-EasyConnect使用记录 1、安装EasyConnect 打开EasyConnect官网EasyConnect 根据当前电脑系统选择对应版本下载 作者这里是ubuntu 22.04版本 右击,选择 “软件安装” 即可安装完成;windows版本类似…

数据可视化:揭开“智慧校园”新篇章,助力新时代教育信息化

随着移动互联网、物联网等新一代信息技术的快速发展,建设智慧校园已经具备了成熟的技术条件。自从教育部启动教育信息化2.0计划后,建设智慧校园已成为我国教育信息化发展目标,无论是国家教育事业发展的十三五规划,还是十四五规划&…

Hadoop高手之路7-Hadoop的新特性

文章目录Hadoop高手之路7-Hadoop的新特性一、Hadoop2.0以上新特性二、Yarn资源管理框架1. yarn体系结构2. yarn的工作流程三、HDFS的高可用HA1. HDFS的高可用(HA)架构2. 搭建Hadoop高可用HA集群1) 规划集群节点2) 环境准备3) 配置HA集群(1) 修改core-sit…

【ROS】—— ROS通信机制——实践与练习(六)

文章目录前言1. 话题发布1.1 C方式实现1.2 python实现2. 话题订阅2.1 C实现2.2 python实现3. 服务调用3.1 C3.2 python4. 参数设置4.1 C4.2 python4.3 运行4.4 其他方式4.4.1 修改小乌龟节点的背景色(命令行实现)4.4.2 启动节点时,直接设置参数4.4.3 通过launch文件…

Java测试框架——JUnit详解(45)

文章目录前言何为JUnit?官方资料JUnit4常用注解和断言代码测试搭建一个JUnit测试环境生命周期忽略测试断言测试异常测试测试时间套件测试JUnit5JUnit5对比JUnit4的好处导包的改变注解的改变扩展JUnit新功能:参考文章JUnit是Java编程语言的单元测试框架&a…

list的介绍及模拟实现

🌈感谢阅读East-sunrise学习分享——list的介绍及模拟实现 博主水平有限,如有差错,欢迎斧正🙏感谢有你 码字不易,若有收获,期待你的点赞关注💙我们一起进步 今天想分享介绍一下STL的容器之一lis…

openharmony GPIO 驱动开发

openharmony GPIO 驱动开发GPIO 基础知识GPIO 基础知识——概念GPIO 基础知识——IO 复用GPIO 基础知识——GPIO 分组和编号GPIO 基础知识——用户态测试HDF 框架下 GPIO 驱动HDF 框架下的 GPIO 驱动——案例描述(以 HI3516DV300 平台为例,提供代码)HDF 框架下的 GP…

为什么jvm需要有栈协程?

旧有的servlet生态的线程模型 首先我们先要聊一聊现在我们用的最多的servlet的执行模型是什么: 这个dispatch其实就是一个EventLoop或者说是一个selector来检测注册到其上的链接状态发生的变化 以Tomcat为例子,当这个selector发现存在一个链接可读时&…

【node.js】fs\path\http模块的使用

🥳博 主:初映CY的前说(前端领域) 🌞个人信条:想要变成得到,中间还有做到! 🤘本文核心:Node.js的fs\path\http模块的使用,模块化开发概念 目录 一、node.js概念与作…

一个曾经分享动态(2021)的回顾和解释-2023-

虽然看过一些典故,里面有名言道: 解释永远是多余的,理解的人不需要,不理解的更不需要。 但是,误会还是需要沟通来消除的。 例如,曾经分享过: 如下都是误会 ↓↓↓↓↓↓↓↓↓ 有朋友联系我&a…

解决东方财富数据接口激活后仍显示reactive的问题

首先确保代码可以在python中导入这个包: from EmQuantAPI import c如果无法导入,就是python没有配置好东方财富的接口,可以参考: Mac版本:Mac使用Python接入东方财富量化接口Choice,调试与获取数据Window…

北京智和信通:信创运维自动化,全栈适配国产软硬件环境

近年来,新基建和信创产业政策东风席卷神州,国产CPU、操作系统、关键应用软件等核心技术步入发展快车道,一批优秀软硬件产品走进政府机关、国企事业单位。在国产软硬件核心技术崛起的过程中,如何迅速搭建起成熟的生态环境是行业面临…

LeetCode135之分发糖果(相关话题:数组,贪心思想)

题目描述 n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求,给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。 请你给每个孩子分发糖果,计算并返回需…

【node.js】跨域的解决办法(CORS方法、同源策列的理解)

🥳博 主:初映CY的前说(前端领域) 🌞个人信条:想要变成得到,中间还有做到! 🤘本文核心:面对cors跨域、同源策略的处理 下图为本文的核心 目录 一、 跨域介绍 二、同源策略 三…

正态分布与numpy.random.normal函数

文章目录1. 正态分布2. numpy.random.normal函数3. 示例在Numpy中,有一个专门用于生成符合正态分布的随机数函数:numpy.random.normal,本文我们梳理一下它的使用方法,在梳理前,需要先了解一下什么是正态分布。 1. 正态…

黑马Hive+Spark离线数仓工业项目-任务流调度工具AirFlow(1)

任务流调度工具AirFlow 1. AirFlow介绍【了解】 - 功能、特点 - 架构角色、安装部署 2. **AirFlow使用【掌握】** - 核心:调度脚本【Python | Shell】 - 定时调度:Linux Crontab表达式 - 邮件告警:配置 3. 回顾Spark核心概念 - 存…

【10个基本网络故障排查工具-每个IT专业人员应了解】

网络故障排除工具是每个网络管理员的必需品。 在网络领域入门时,重要的是要积累一些可用于解决各种不同网络状况的工具。 虽然特定工具的使用确实是主观的并且由工程师自行决定,但本文中的工具选择是基于它们的一般性和通用性。 本文回顾了可帮助您解决大…

聊聊业务项目如何主动感知mysql是否存活

前言 先前写过一篇文章聊聊如何利用redis实现多级缓存同步,里面讲到业务部门因数据库宕机,有技术提出当数据库宕机,切换到redis,今天我们就来聊聊如何触发这个切换动作? 1、方案一:利用异常机制 伪代码如下&#xf…

大三寒假人生第一次面试失败

2022/12/28,今天是人生第一次面试。坐了2个小时的地铁去面试结果却很惨。一开始进门就笔试,当看到笔试题时发现很多基础,平时耳熟能详的词汇却怎么样也回答不出来。做了一个多小时,当面试官把题改了以后一句笔试没过。说真的在出门…