第一天 什么是CSRF ?

✅作者简介:大家好,我是Cisyam,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉
🍎个人主页:Cisyam-Shark的博客
💞当前专栏: 每天一个知识点
✨特色专栏: 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.rhkb.cn/news/81832.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Pytest集成Allure生成漂亮的图形测试报告

目录 前言 依赖包安装 Pytest Allure Pytest Adaptor 改造基于Pytest的测试用例 生成测试报告 运行测试 生成测试报告 打开测试报告 资料获取方法 前言 之前写过一篇生成测试报告的博客,但是其实Allure首先是一个可以独立运行的测试报告生成框架&#xff…

中小企业在数字化转型上所面对的问题都有哪些?_光点科技

随着科技的飞速发展,数字化转型已经成为企业持续发展的必由之路。尤其是中小企业,数字化转型不仅可以提高效率,降低成本,还可以拓展市场,增强竞争力。然而,数字化转型并非一帆风顺,中小企业在这…

kubeasz在线安装K8S集群单master

1.基础系统配置 确保在干净的系统上开始安装,不能使用曾经装过kubeadm或其他k8s发行版的环境 系统是Ubuntu 或者CentOS 7 2.下载文件 2.1 下载工具脚本ezdown,举例使用kubeasz版本3.5.0 #此版本默认安装的是 K8S v1.26.0 export release3.5.0 wget h…

C语言数组第十课---------------三子棋-------数组经典练手题

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 🎂 作者介绍: 🎂🎂 🎂…

根据数组中各值是否满足指定条件决定是否将其按指定规则计算更新numpy.putmask()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 根据数组中各值是否满足指定条件 决定是否将其按指定规则计算更新 numpy.putmask() 选择题 以下程序的运行结果是? import numpy as np xnp.array([1,2,3,4,5]) print("【显示】x:\n&quo…

SolidUI社区-从开源社区角度思考苹果下架多款ChatGPT应用

文章目录 背景下架背景下架原因趋势SolidUI社区的未来规划结语如果成为贡献者 背景 随着文本生成图像的语言模型兴起,SolidUI想帮人们快速构建可视化工具,可视化内容包括2D,3D,3D场景,从而快速构三维数据演示场景。SolidUI 是一个创新的项目…

使用Openoffice或LibreOffice实现World、Excel、PPTX在线预览

使用Openoffice或LibreOffice实现World、Excel、PPTX在线预览 预览方案使用第三方服务使用前端库转换格式 jodconverterjodconverter概述主要特性OpenOfficeLibreOffice jodconverter的基本使用添加依赖配置创建DocumentConverter实例上传与转换预览启动上传与预览World 与Spri…

arcgis栅格数据之最佳路径分析

1、打开arcmap,加载数据,需要对影像进行监督分类,如下: 这里任选一种监督分类的方法(最大似然法),如下: 这里会先生成一个.ecd文件,然后再利用.ecd文件对影像进行分类。如…

linux (platform driver)平台设备驱动匹配方法

Table of Contents 一、匹配函数platform_match 1.1、设备树匹配方法 1.2、id_table匹配方法 1.3、dev-name和platform_driver->drv->name匹配方法 一、匹配函数platform_match 平台设备驱动分为设备层和驱动层,每当有新的设备或者新的设备驱动注册时都要…

“构建高级自定义MVC框架实现CRUD功能的完整指南“

目录 前言1. 导入罐2. 导入工具类3. 配置框架配置文件以及web.xml4. 创建实体类、DAO、Service和Controller5. 配置框架的配置文件6. 页面前端开发 总结 前言 在现代的Web开发中,MVC(Model-View-Controller)架构模式被广泛应用。它将应用程序…

汽车维修保养记录查询API:实现车辆健康状况一手掌握

在当今的数字化世界中,汽车维修保养记录的查询和管理变得前所未有地简单和便捷。通过API,我们可以轻松地获取车辆的维修和保养记录,从而实现对手中车辆健康状况的实时掌握。 API(应用程序接口)是进行数据交换和通信的标…

常用 JVM 调优工具

点击下方关注我,然后右上角点击...“设为星标”,就能第一时间收到更新推送啦~~~ JVM 日常调优总结起来就是:首先通过 jps 命令查看当前进程,然后根据 pid 通过 jinfo 命令查看和修改 jvm 参数,通过 jstat 命令查看 cla…

Disruptor-源码解读

前言 Disruptor的高性能,是多种技术结合以及本身架构的结果。本文主要讲源码,涉及到的相关知识点需要读者自行去了解,以下列出: 锁和CAS伪共享和缓存行volatile和内存屏障 原理 添加了中文注释的源码:Disruptor 下…

Databend 开源周报第 105 期

Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展,遇到更贴近你心意的 Databend 。 Databend 轻量级…

深入理解负载均衡原理及算法

1. 前言 在互联网早期,网络还不是很发达,上网用户少,流量相对较小,系统架构以单体架构为主。但如今在互联网发达的今天,流量请求动辄百亿、甚至上千亿,单台服务器或者实例已完全不能满足需求,这就有了集群。不论是为了实现高可用还是高性能,都需要用到多台机器来扩展服…

Jupyter Notebook 500 : Internal Server Error

1. 这个问题的根本原因在于: pygments 包 版本过高。 安装pygments 2.6.1 2.jupyter版本如下 如果某个版本有冲突,卸载了重新安装一下就行。 安装命令: pip install pygments 2.6.1 -i https://pypi.tuna.tsinghua.edu.cn/simple 另外…

嘉楠勘智k230开发板上手记录(三)--K230_RVV实战

按照K230_RVV实战.md操作 在k230_sdk目录下运行,Makefile里默认的toolchain路径是在/opt下的,需要拷贝过去 cp -r toolchain /opt/ make rt-smart-apps 进入目录 src/big/rt-smart 运行脚本 source smart-env.sh riscv64 配置环境变量 source smart-e…

git教程(第一次使用)

一、gitee和github区别 二、git使用 下载地址 windows:https://gitforwindows.org/ mac:http://sourceforge.net/projects/git-osx-installer/ 1.git初次运行前的配置 (1)配置用户信息 git config --global user.name "…

【模型预测控制MPC】使用离散、连续、线性或非线性模型对预测控制进行建模(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

AP51656 电流采样降压恒流驱动IC RGB PWM深度调光 LED电源驱动

产品描述 AP51656是一款连续电感电流导通模式的降压恒流源,用于驱动一颗或多颗串联LED 输入电压范围从 5 V 到 60V,输出电流 可达 1.5A 。根据不同的输入电压和 外部器件, 可以驱动高达数十瓦的 LED。 内置功率开关,采用电流采样…