第01天 什么是CSRF ?

news2024/11/24 12:41:17

每天学习一个知识点
✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉
🍎个人主页:Leo的博客
💞当前专栏: 每天一个知识点
✨特色专栏: MySQL学习
🥭本文内容:第一天 什么是CSRF ?
🖥️个人小站 :个人博客,欢迎大家访问
📚个人知识库: 知识库,欢迎大家访问

1. CSRF概念

CSRF定义: 跨站请求伪造(英语:Cross-site request forgery)是一种对网站的恶意利用,也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。 CSRF跨站点请求伪造(Cross—Site Request Forgery) 跟XSS攻击一样,存在巨大的危害性。

你可以这样来理解:攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。
简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并执行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去执行。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。

CSRF地位: 是一种网络攻击方式,是互联网重大安全隐患之一,NYTimes.com(纽约时报)、Metafilter,YouTube、Gmail和百度HI都受到过此类攻击。

对比XSS: 跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。

image-20230806102653152

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

  • 1.登录受信任网站A,并在本地生成Cookie。
  • 2.在不登出A的情况下,访问危险网站B。

image-20230805235153045

2. CSRF攻击的攻击原理

CSRF攻击一般的攻击原理是,攻击者向目标网站注入一个恶意的CSRF攻击URL地址,当用户访问某特定网页时,如果用户点击了该URL,那么攻击就触发了,我们可以在该恶意的URL对应的网页中,利用来向目标网站发生一个get请求,该请求会携带cookie信息,所以也就借用了用户的身份,也就是伪造了一个请求,该请求可以是目标网站中的用户有权限访问的任意请求。也可以使用JavaScript构造一个提交表单的post请求。比如构造一个转账的POST请求。

3. 如何防御

3.1 尽量使用 post,限制get

get 请求太容易被利用,攻击者可以构造一个 img 标签,通过图片资源嵌入恶意操作,而 img 又不能被过滤掉。所以接口最好限制为 POST 请求

3.2 加验证码

POST 请求也不是绝对安全的,攻击者可以通过内嵌框架,构建隐藏表单,当我们访问这个网站时候,就自动将这个表单提交了,从而造成了一次 CSRF 的攻击。所以这时候我们可以采用加入验证码的方式,因为攻击者所构造出来的就是伪的请求,所以在某一次提交时候,让用户提交验证码,或者滑块验证,能够确保这是一次用户的行为,而非黑客行为。

3.3 Referer Check

http 头存在一个字段 Referer,它能够记录当前一次请求的来源地址。什么意思呢,当我们访问正常网站时候,调用了某个接口例如 192.108.12.88/transferxxxxx ——> 而攻击者构造的伪请求地址 113.132.44.53/gg.html 由于攻击者对正常网站实施 CSRF 攻击他只能在自己的站点里面进行构造请求,所以当 Referer 传过来是跟当前网站不同的域名,经过后端判断,如果 Referer 的值不是当前的网页就拒绝此次请求。

3.4 Anti CSRF Token

CSRF 攻击之所以能够成功,主要是因为黑客能够完全伪造用户的请求,在这次请求中,用户的信息是存在 cookie 中的,所以黑客可以在不知道这些验证信息的情况下直接利用用户的 cookie 去跳过安全认证,我们要防御 CSRF 关键在于请求放入的时候黑客不能去伪造信息,并且这个信息不存在 cookie 之中,所以我们就可以在通过 http 的请求中或者是头信息中加入一个随机产生的 token,这个 token 就会存在服务端,通过拦截器去验证这个 token,如果请求头中不存在 token 或者 token 不正确,拦截器就会认为这是一次 CSRF 攻击,拒绝此次请求。

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

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

相关文章

vcruntime140.dll如何修复?哪个修复方法更简单

修复 vcruntime140.dll 的过程确实是一次让我有些头疼的经历。起初,当我在使用某个程序时,突然出现了一个错误提示,指出 vcruntime140.dll 文件丢失或损坏。这让我感到困惑,因为我并不清楚这个文件的作用和重要性,以及…

Textnow注册防封,如何免费获取收发信息的美国手机号

TextNow和Google voice一样,是美国的一款免费的网络通信应用程序,可用于免费收发短信和无限制拨打电话,对于那些希望节省通讯费用的人,尤其是那些需要在跨境商务通讯频繁、跨境推广需要短信收发的用户来说,TextNow非常…

VsCode美化 - VsCode自定义 - VsCode自定义背景图

VsCode美化 - VsCode自定义 - VsCode自定义背景图:添加二次元老婆图到VsCode 前言 作为一个二刺螈,VsCode用久了,总觉得少了些什么。是啊,高效的代码生产工具中怎么能没有老婆呢? 那就安装一个VsCode插件把老婆添加…

【Spring专题】Spring之Bean的生命周期源码解析——上(扫描生成BeanDefinition)

目录 前言阅读指引阅读建议 课程内容一、生成BeanDefinition1.1 简单回顾1.2 概念回顾1.3 核心方法讲解 二、方法讲解2.1 ClassPathBeanDefinitionScanner#scan2.2 ClassPathBeanDefinitionScanner#doScan2.3 ClassPathScanningCandidateComponentProvider#findCandidateCompon…

jumpserver命令记录膨胀问题

一.背景 jumpserver堡垒机针对只是接管ssh来说,正常操作Linux的指令记录应该不会太多,每天有个几千条都已经算很多了。所以默认jumpserver采用MySQL作为存储介质本身也没啥问题。但是我们使用jumpserver对【MySQL应用】进行了托管,导致查询SQ…

【Linux命令详解 | find命令】 find命令用于在指定目录下搜索文件和目录,可以按照多种条件进行搜索

文章目录 简介参数列表使用介绍1. 基本搜索2. 按类型搜索3. 根据文件大小搜索4. 结合-exec执行命令5. 使用多个条件 结论 简介 find命令是一款功能强大的工具,用于在指定目录下搜索文件和目录。它支持多种条件,让你可以根据不同的需求精确地定位文件和目…

System Verilog-packed array以及unpacked array

如下声明: logic [7:0] data [255:0]维度在标识符前面的部分称为packed array,在标识符后面的部分称为unpacked array,一维的pakced array也称为vector。 packed array packed array只能由单bit数据类型(bit,logic,reg&#xf…

javascript之webAPIs(1)

文章和代码已经归档至【Github仓库:https://github.com/timerring/front-end-tutorial 】或者公众号【AIShareLab】回复 javascript 也可获取。 文章目录 介绍概念DOM 树DOM 节点Document 获取 DOM 对象 介绍 严格意义上讲,我们在 JavaScript 阶段学习的…

解读spring中@Value 如何将配置转自定义的bean

实现方式 着急寻求解决方式的猿友先看这块 定义配置转化类 public class UserConverter implements Converter<String, List<User>> {Overridepublic List<User> convert(String config) {if (StringUtils.isEmpty(config)) {return Collections.emptyLis…

C++将函数声明放在头文件中的示例

C将函数声明放在头文件中的示例 C函数原型声明&#xff08;函数声明&#xff09;的位置可以有以下几种选择&#xff1a; 1.函数声明放在同一源文件中&#xff1a;这种情况通常适用较小的项目中&#xff0c;通常可以将函数的声明和定义放在同一个源文件中。先声明函数原型&…

教你如何将3D模型导入到可视化大屏系统中,并实现可交互效果

首先我们需要准备一款数字孪生软件&#xff0c;本文中使用的是山海鲸可视化&#xff0c;这是一款免费的零代码数字孪生大屏开发平台软件。 下载完成后打开山海鲸可视化&#xff0c;点击新建来创建一个大屏项目。 我们可以根据自己的需要来创建各种场景的项目或是套用模板项目&a…

React源码解析18(4)------ completeWork的工作流程【mount】

摘要 经过上一章&#xff0c;我们得到的FilberNode已经具有了child和return属性。一颗Filber树的结构已经展现出来了。 那我们最终是想在页面渲染真实的DOM。所以我们现在要在completeWork里&#xff0c;构建出一颗离屏的DOM树。 之前在说FilberNode的属性时&#xff0c;我们…

CAD文件打开错误中断怎么办?CAD文件打开错误中断的解决方法

CAD是一款计算机辅助设计软件&#xff0c;主要用于二维绘图、详细绘制、设计文档和基本三维设计&#xff0c;CAD已经是一款国内国外广为流行的绘图工具了&#xff0c;在土木建筑、装饰装潢、城市规划、园林设计、电子电路、机械设计、服装鞋帽、航空航天、轻工化工等行业应用非…

【UE4 RTS】08-Setting up Game Clock

前言 本篇实现的效果是在游戏运行后能够记录当前的游戏时间&#xff08;年月日时分秒&#xff09;&#xff0c;并且可以通过修改变量从而改变游戏时间进行的快慢。 效果 步骤 1. 在Blueprints文件夹中新建如下两个文件夹&#xff0c;分别命名为“GameSettings”、“Player”…

【docker】设置 docker 国内镜像报错,解决方案

一、报错&#xff1a; [rootlocalhost ~]# systemctl restart docker Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.二、原因&#xf…

Excel---成绩相同者,名次并列排列,三步搞定

需求&#xff1a;一张成绩表&#xff0c;共341行(340条数据&#xff0c;第一条为标题)&#xff0c;根据成绩进行排序&#xff0c;成绩相同进行名次并列 一、选择生成结果的位置&#xff0c;我这里点击了一下E2单元格 二、公式—>插入–>rank函数 数值&#xff1a;D2 表示…

IDEA新建类时自动设置类注释信息,署名和日期

IDEA设置路径 File --> Settings --> Editor --> File and Code Templates --> Include --> File Header 官方模板 这里 ${USER} 会读取计算机的用户名 ${DATE}是日期 ${TIME}是时间 /*** Author ${USER}* Date ${DATE} ${TIME}* Version 1.0*/

成都优优聚拥有丰富美团代运营经验!

成都优优聚美团代运营是一家专业的电商运营服务机构&#xff0c;致力于帮助商家提升线上业绩&#xff0c;增加销售额。他们以优良的售后服务和卓越的业绩&#xff0c;赢得了众多商家的认可和信赖。 与成都优优聚美团代运营合作的好处是多方面的。首先&#xff0c;他们拥有一支经…

java spring cloud 企业工程管理系统源码+二次开发+定制化服务 em

Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下&#xff1a; 首页 工作台&#xff1a;待办工作、消息通知、预警信息&#xff0c;点击可进入相应的列表 项目进度图表&#xff1a;选择&#xff08;总体或单个&#xff09;项目显…

兰州https证书申请

https证书是由CA认证机构颁发的数字证书&#xff0c;可以为域名网站或者公网IP网站提供信息加密服务&#xff0c;正规CA认证机构签发的https证书可以兼容99%的主流浏览器和IOS、Windows系统&#xff0c;同样&#xff0c;现在流行的小程序也需要https证书。那么&#xff0c;该怎…