CSRF 攻击

news2025/1/13 10:05:47

概述

CSRF(Cross-site request forgery,跨站请求伪造)。

它是指攻击者利用了用户的身份信息,执行了用户非本意的操作。

它首先引导用户访问一个危险网站,当用户访问网站后,网站会发送请求到被攻击的站点,这次请求会携带用户的cookie发送,因此就利用了用户的身份信息完成攻击。

image.png

防御方式

image.png

SameSite

SameSite 是一个与 HTTP 状态码和响应头相关的属性,用于定义浏览器如何处理跨站点请求。这个属性主要用于防止跨站点请求伪造(CSRF,Cross-Site Request Forgery)攻击,它允许服务器要求某些类型的 cookie 在跨站点请求中不被发送。

以下是 SameSite 属性的几种取值及其含义:

  1. Strict: 这种模式下,cookie 将不会被包含在任何跨站点请求中。也就是说,只有在请求的域与设置 cookie 的域完全一致时,cookie 才会被发送。

  2. Lax: 这种模式下,cookie 将被包含在顶层导航请求中,但不会在跨站点请求中被发送。例如,如果你从一个网站链接到另一个网站,浏览器会发送 cookie,但如果你尝试通过 JavaScript 发起一个跨站点请求,cookie 则不会被发送。get 请求会携带 cookie,但是 post 请求不携带。

  3. None: 这种模式下,cookie 将被包含在跨站点请求中。如果你想让 cookie 在跨站点请求中被发送,就需要将 SameSite 设置为 None,并且同时设置 Secure 属性,以确保 cookie 只在 HTTPS 上传输。

从 Chrome 80 开始,默认的 SameSite 变更为 SameSite=Lax,这意味着如果你的服务器没有明确设置 SameSite 属性,那么浏览器将默认以 Lax 模式处理 cookie。

为了确保跨站点请求能够正确地携带 cookie,你需要:

  • 设置 SameSite=None
  • 设置 Secure 属性,确保 cookie 只在 HTTPS 上传输。

示例代码:

Set-Cookie: key=value; SameSite=None; Secure

使用 CSRF Token

CSRF Token 是一种常见的防御机制,它要求每个请求都必须包含一个由服务器生成的、随机的、唯一的 token。服务器在处理请求时会验证这个 token 是否有效。具体步骤如下:

  1. 生成 Token: 当用户登录后,服务器生成一个 CSRF Token 并将其存储在服务器端的会话中。
  2. 发送 Token: 服务器将 Token 发送给客户端,并要求客户端在后续的请求中包含这个 Token。
  3. 验证 Token: 当客户端发起请求时,服务器会检查请求中是否包含 Token,并且验证 Token 是否与服务器端存储的 Token 匹配。

这种方法的关键在于,攻击者无法预测 Token 的值,因此即使他们能够诱导用户点击链接或提交表单,由于 Token 不匹配,请求也会被服务器拒绝。

image.png

比如这里我打开某网站,他就是使用的 csrfToken。

image.png

什么是CSRF?为什么CSRF Token写在COOKIE里面?_csrf cookie-CSDN博客

使用 Referer 检查

Referer 是 HTTP 请求头中的一个字段,用于指示请求是从哪个页面发起的。服务器可以通过检查 Referer 来防御 CSRF 攻击:

  1. 检查 Referer: 服务器在处理请求时,检查请求的 Referer 头部,确认请求是否来自可信的来源。
  2. 验证来源: 如果 Referer 头部指向的是攻击者的域名,服务器可以拒绝处理请求。

然而,这种方法有几个局限性:

  • 用户可能禁用了 Referer 头部,或者浏览器设置可能导致 Referer 头部不被发送。
  • 攻击者可以构造请求,使其 Referer 头部指向合法的来源。
  • 不能访问 base64 编码

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

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

相关文章

机器学习之常用算法与数据处理

一、机器学习概念: 机器学习是一门多领域交叉学科,涉及概率论、统计学、计算机科学等多门学科。它的核心概念是通过算法让计算机从数据中学习,改善自身性能。机器学习专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识…

RangeNet++ 检测3D点云语义算法的详细配置和常见问题

配置环境: Ubuntu18.04 GPU:GeForce MX150 驱动:Ubuntu推荐的nvidia-driver-470 Cuda10.1 cudnn7.6.2 TensorRT 5.1.5.0GCC 7.5.0 运行代码: RangeNet 目录 目录 一、环境配置 1. Ubuntu 18.04 安装NVIDIA驱动 &…

[Spring Cloud] (9)XSS拦截器

文章目录 简述本文涉及代码已开源Fir Cloud 完整项目防XSS攻击必要性:作用: 整体效果后端增加拦截器开关配置pom中增加jsoup依赖添加JSON处理工具类添加xss拦截工具类防XSS-请求拦截器 前端 简述 本文涉及代码已开源 本文网关gateway,微服务…

基于Matlab实现BP神经网络的手写数字识别

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 手写数字识别是计算机视觉和模式识别领域的一个经典问题,具有广泛的应用场景&…

信息安全从业者书单推荐

作为一名网安人,身上肩负的责任是很大的,能力越大,责任也越大,反过来责任越大,能力也必须跟得上。不管是想进这行,还是已经在这行,持续学习肯定是不能缺少的,除了在工作中积累&#…

C++ 求 f(x) = sin x / x 的函数极限

Python: import sympy from sympy import oo #注意无究符号表示形式为两个小定字母o import numpy as np x sympy.Symbol(x) #注意Symbol首字母大写f sympy.sin(x) / x # 定义极限表达式lim sympy.limit(f,x,oo) print(lim)输出: 0 C #include…

Windows系统安装dlib及face_recognition搭建人脸识别环境

关于face_recognition face_recognition被称为世界上最简洁的人脸识别库,借助face_recognition库,我们可以使用Python和命令行提取、识别、操作人脸。 face_recognition的人脸识别是基于业内领先的C开源库 dlib中的深度学习模型,用Labeled …

Centos 7.9 使用 iso 搭建本地 YUM 源

Centos 7.9 使用 iso 搭建本地 YUM 源 1 建立挂载点 [rootlocalhost ~]# mkdir -p /media/cdrom/ 2 创建光盘存储路径 [rootlocalhost ~]# mkdir -p /mnt/cdrom/ 3 上传 CentOS-7-x86_64-Everything-2207-02.iso 到 光盘存储路径 [rootlocalhost ~]# ls /mnt/cdrom/ CentOS-…

基于SSM的“酒店管理系统”的设计与实现(源码+数据库+文档)

基于SSM的“酒店管理系统”的设计与实现(源码数据库文档) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 首页 管理员登录页面 用户管理页面 客房信息查询 酒店详细信息 后台…

Java学习路线思维导图

目录 Java学习流程1.学习大纲2.Java开发中常用的DOS命令 Java入门学习思维导图 Java学习流程 通过大纲了解学习的重点,通过目录依次深入【注:Java环境的搭建百度,提升自己百度的能力】 1.学习大纲 学习流程如下: Java基础语法 …

【Python】用于发送电子邮件的标准库smtplib和构建邮件主体、添加附件、设置收件人的email

欢迎来到《小5讲堂》 这是《Python》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 插件介绍邮件代码扩展知识点文章推荐 插件介绍 smtplib 是 Pytho…

内存函数详解与模拟实现

目录 1.memcpy函数 1.1memmcpy函数的模拟使用 2.memmove函数 2.1memmove 函数的模拟使用 3.memcmp 3.1memcmp函数的模拟实现 4.memset (内存设置) 4.1memset函数的模拟实现 1.memcpy函数 void* memcpy(void* destination, const void* source, size_t num);//之所以是v…

工业4.0 企业级云MES全套源码,支持app、小程序、H5、台后管理端

工业4.0 企业级云MES全套源码,支持app、小程序、H5、台后管理端 采用javaspringboot-vue.jsuniapp开发 随着工业4.0的快速发展,制造执行系统(MES)成为了智能制造的核心。今天,将为大家介绍一款开源的MES系统——MES管…

一个基于HOOK机制的微信机器人

一个基于✨HOOK机制的微信机器人,支持🌱安全新闻定时推送【FreeBuf,先知,安全客,奇安信攻防社区】,👯Kfc文案,⚡备案查询,⚡手机号归属地查询,⚡WHOIS信息查询…

家政保洁服务小程序怎么做?家政公司快速搭建专属小程序

在数字化时代背景下,家政保洁服务行业也迎来了线上转型的新机遇。家政保洁服务小程序,作为一种新型的线上服务平台,不仅能够提升家政公司的服务效率,还能为顾客提供更加便捷的预约上门服务体验。那么家政保洁服务小程序怎么做呢&a…

java智慧工厂制造生产管理MES系统saas模式Java+ idea+ uniapp全套MES系统源码,多端展示

java智慧工厂制造生产管理MES系统saas模式Java idea uniapp全套MES系统源码,多端展示 MES 系统源码(生产制造执行系统)能够帮助企业实现全生产过程的可视化,数据分析智能化、构建高效智能工厂,MES系统通过控制指令、人…

工作学习的电脑定时关机,定时重启,定时提醒

可以直接下载工具: 定时自动关机 大家好,! 在我们学习与工作时,经常会遇到想要在完成一个任务后,再关闭电脑或对电脑重启,但这个时间点,操作电脑的人可能不能在电脑旁边,这样就需要…

Docker快速部署Seata的TC服务以及微服务引入Seata教程

目录 一、使用docker部署Seata的TC服务 1、拉取TC服务镜像 2、创建并运行容器 ​3、修改配置文件 4、在Nacos中添加TC服务的配置 5、重启TC服务 二、微服务集成Seata 1、引入依赖 2、修改配置文件 Seata是阿里的一个开源的分布式事务解决方案,能够为分布…

2024年5月计算机视觉论文推荐:包括扩散模型、视觉语言模型、图像编辑和生成、视频处理和生成以及图像识别等各个主题

我们今天总结下2024年5月发表的最重要的论文,重点介绍了计算机视觉领域的最新研究和进展,包括扩散模型、视觉语言模型、图像编辑和生成、视频处理和生成以及图像识别等各个主题。 Diffusion Models 1、Dual3D: Efficient and Consistent Text-to-3D Ge…

mysql中text,longtext,mediumtext区别

文章目录 一.概览二、字节限制不同三、I/O 不同四、行迁移不同 一.概览 在 MySQL 中,text、mediumtext 和 longtext 都是用来存储大量文本数据的数据类型。 TEXT:TEXT 数据类型可以用来存储最大长度为 65,535(2^16-1)个字符的文本数据。如果存储的数据…