网络空间安全(19)CSRF攻防

news2025/3/10 7:56:50

一、简介

       跨站请求伪造(Cross-Site Request Forgery,简称CSRF)是一种网络攻击方式。攻击者通过诱导受害者访问恶意页面,利用受害者在被攻击网站已经获取的注册凭证(如Cookie),绕过后台的用户验证,冒充受害者执行非预期的操作。CSRF攻击通常发生在第三方网站,而不是被攻击网站本身。

二、攻击原理

  1. 用户登录与Cookie生成

           用户使用浏览器登录受信任的网站A,并在登录后,网站A在用户的浏览器中生成Cookie。Cookie中通常包含用户的会话信息或认证信息。
  2. 浏览器自动携带Cookie

           当用户在同一会话下访问其他网页时,浏览器会自动携带该网站的Cookie。这是HTTP协议和浏览器的默认行为。
  3. 攻击者诱导访问恶意页面

           攻击者通过邮件、社交工程或其他途径诱导用户点击恶意链接,跳转到攻击者控制的网站B。
  4. 恶意页面发送请求

           网站B返回的页面包含一些攻击性代码,这些代码会自动向网站A发送请求,如转账、修改密码等。由于浏览器会自动携带存放在Cookie中的用户认证信息,攻击者可以伪造看似合法的请求。

三、攻击方式

  1. 伪造表单提交

           攻击者构造一个包含恶意表单的网页。当受害者访问该网页时,表单会自动提交,导致受害者的账户被恶意操作。例如,修改密码、转账等。
  2. GET请求劫持

           攻击者将恶意链接隐藏在图片、链接等元素中,诱导受害者点击。当受害者点击链接时,浏览器会发送一个GET请求,导致受害者的账户被恶意操作。例如,通过<img>标签的src属性指向恶意URL,触发GET请求。
  3. 结合钓鱼邮件或社交网络传播

           攻击者通过发送看似正常的钓鱼邮件,诱导用户点击邮件中的恶意链接或附件。这些链接或附件可能包含CSRF攻击代码。此外,攻击者还可以在社交网络上发布引诱用户点击的内容,如“点击获得免费礼品”等。

四、危害

  1. 未经授权的操作

           攻击者可以在受害者不知情的情况下,执行转账、修改密码、发布消息等敏感操作。
  2. 数据泄露和篡改

           攻击者可以窃取用户的敏感信息,如登录凭证、个人信息等。同时,还可以篡改用户的账户信息、订单信息等重要数据。
  3. 破坏网站安全

           通过CSRF攻击,攻击者可以删除网站数据、篡改网站设置等,破坏网站的正常运行。

五、防御策略

  1. 验证请求的来源

    • Origin验证:服务器端检查HTTP请求头中的Origin字段,确保请求来自同一源。
    • Referer验证:检查HTTP请求头中的Referer字段,确认请求是从原网站发出而不是从其他站点发出的。但需要注意的是,Referer字段可能会被禁用或伪造,因此不能完全依赖其来防范CSRF攻击。
  2. 使用验证码

           对于关键操作,如修改密码、转账等,可以要求用户输入验证码。这可以防止自动提交的恶意请求,但可能会影响用户体验。
  3. 使用CSRF令牌(Token)

    • 生成Token:服务器端在用户访问包含敏感操作的页面时,生成一个唯一的、具有足够随机性的CSRF令牌,并将其存储在用户的会话(Session)中。
    • 传递Token:将CSRF令牌嵌入到HTML表单的隐藏字段中,或者作为请求头的一部分传递。
    • 验证Token:服务器收到请求后,校验请求中的Token与会话中的Token是否一致,若不一致则拒绝请求。这种方法可以有效防止CSRF攻击,因为攻击者无法预测和伪造合法的Token。
  4. 设置合适的Cookie属性

    • HttpOnly:通过设置HttpOnly属性,可以防止JavaScript访问Cookie,从而提高安全性。
    • Secure:通过设置Secure属性,可以确保Cookie只能通过HTTPS协议发送,防止在HTTP协议下被窃取。
    • SameSite:将Cookie的SameSite属性设置为Strict或Lax,以限制跨站请求。在Strict模式下,浏览器只会在同站点请求中发送Cookie;在Lax模式下,则允许在一些安全的跨站导航场景下发送Cookie。
  5. 实施双重认证机制

           对于特别敏感的操作,可以引入双重认证机制,如短信验证码、生物识别等,以增加攻击的难度。
  6. 避免使用GET请求进行敏感操作

           GET请求容易被攻击者利用来构造恶意链接,因此应尽量避免使用GET请求进行敏感操作。推荐关键交易API采用POST方式,以提高CSRF攻击成本。

总结

       CSRF攻击是一种常见的网络攻击方式,利用用户已登录的身份在目标网站上执行非授权操作。为了防范CSRF攻击,需要采取多种防御策略,包括验证请求来源、使用验证码、使用CSRF令牌、设置合适的Cookie属性、实施双重认证机制以及避免使用GET请求进行敏感操作等。同时,用户也应提高警惕,避免点击不明链接或访问可疑网站,以免成为CSRF攻击的受害者。

 结语      

技术的迷宫

探索的征途

!!!

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

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

相关文章

DEV C++安装

点击----我接受 点击--下一步 选择安装路径&#xff1a; D盘安装选择路径&#xff1a; 点击----安装等待安装完成点击---完成即可 一路下一步即可

ESP32驱动OV3660摄像头实现物体轮廓识别(摄像头支持红外夜视、边缘AI计算)

目录 1、传感器特性 2、硬件原理图 3、驱动程序 ESP32-S3 AI智能摄像头模块是一款专为智能家居和物联网应用打造的高性能边缘AI开发模组。它集成了摄像头、麦克风、音频功放、环境光传感器和夜视补光灯,无需依赖云端即可实现本地化AI推理。 凭借TensorFlow Lite、YOLO和O…

深入探讨 Docker 层次结构及其备份策略20250309

深入探讨 Docker 层次结构及其备份策略 本文将深入探讨 Docker 层次结构 以及在 不同场景下应选择哪种备份方式。通过本文的介绍&#xff0c;您将对如何高效地管理和迁移 Docker 容器有更深的理解。 &#x1f4cc; 什么是 Docker 层次结构&#xff1f; Docker 镜像采用了 分…

游戏引擎学习第145天

仓库:https://gitee.com/mrxiao_com/2d_game_3 今天的计划 目前&#xff0c;我们正在完成遗留的工作。当时我们已经将声音混合器&#xff08;sound mixer&#xff09;集成到了 SIMD 中&#xff0c;但由于一个小插曲&#xff0c;没有及时完成循环内部的部分。这个小插曲主要是…

如何在el-input搜索框组件的最后面,添加图标按钮?

1、问题描述 2、解决步骤 在el-input组件标签内&#xff0c;添加一个element-plus的自定义插槽&#xff0c; 在插槽里放一个图标按钮即可。 3、效果展示 结语 以上就是在搜索框组件的末尾添加搜索按钮的过程。 喜欢本篇文章的话&#xff0c;请关注本博主~~

NoteGen是一款开源跨平台的 AI 笔记应用,专注于 recording 和 writing ,基于 Tauri 开发

一、软件介绍 文末提供程序和源码下载 NoteGen 是一款专注于记录和写作的跨平台 AI 笔记应用&#xff0c;基于 Tauri 开发。NoteGen 的核心理念是将记录、写作和 AI 结合使用&#xff0c;三者相辅相成。记录功能可以帮助用户快速捕捉和整理碎片化知识。整理功能是连接记录和写…

第五次CCF-CSP认证(含C++源码)

第五次CCF-CSP认证 第一道&#xff08;easy&#xff09;思路及AC代码 第二道&#xff08;easy&#xff09;思路及AC代码solution 1solution 2 第三道&#xff08;mid&#xff09;思路及AC代码&#xff08;mid&#xff09; 第一道&#xff08;easy&#xff09; 题目链接 思路及…

个人学习编程(3-06) 搜索

树的高度&#xff1a; 题目&#xff1a; PS G:\vscodetest> .\ab.exe 5 5 1 2 1 4 1 5 2 3 3 #include <stdio.h> #include <vector> #include <queue> using namespace std; int main() {int n,m;scanf("%d %d",&n,&m);vector<vec…

springcloud sentinel教程

‌QPS&#xff08;Queries Per Second&#xff09;即每秒查询率 TPS&#xff0c;每秒处理的事务数目 PV&#xff08;page view&#xff09;即页面浏览量 UV 访问数&#xff08;Unique Visitor&#xff09;指独立访客访问数 一、初识Sentinel 什么是雪崩问题? 微服务之间相…

从零开始用react + tailwindcss + express + mongodb实现一个聊天程序(十一) 实现服务端和客户端socketio 连接

1.后端部分 socketIO文档参考Socket.IO 首先在lib下新建socket.js文件 参考服务器API | Socket.IO import {Server} from socket.io; import http from http import express from "express"const app express() const server http.createServer(app) const io …

【GoTeams】-3:构建api、重构错误码

本文目录 1. 构建api梳理调用关系api包的作用路由梳理注册Register代码语法 2. 重构错误码 1. 构建api 首先复制project-user&#xff0c;改名为project-api&#xff0c;放在总的路径下&#xff0c;然后在工作区中进行导入。 运行命令go work use .\project-api\新建工作区之…

《苍穹外卖》SpringBoot后端开发项目重点知识整理(DAY1 to DAY3)

目录 一、在本地部署并启动Nginx服务1. 解压Nginx压缩包2. 启动Nginx服务3. 验证Nginx是否启动成功&#xff1a; 二、导入接口文档1. 黑马程序员提供的YApi平台2. YApi Pro平台3. 推荐工具&#xff1a;Apifox 三、Swagger1. 常用注解1.1 Api与ApiModel1.2 ApiModelProperty与Ap…

BLUEM2引擎源码2025最新版

BLUE 引擎解析&#xff1a;传奇私服圈中的热门引擎 一、BLUE 引擎简介 BLUE 引擎是传奇私服圈子中较为知名的一款游戏引擎&#xff0c;它在传统的传奇引擎基础上进行了优化和扩展&#xff0c;使得私服开发者可以更加方便地搭建和管理服务器。相比于早期的 GEE、LEG、Hero 等引…

【RAG】检索后排序 提高回答精度

问题: RAG中&#xff0c;有时&#xff0c;最合适的答案不一定排在检索的最前面 user_query "how safe is llama 2" search_results vector_db.search(user_query, 5)for doc in search_results[documents][0]:print(doc"\n")response bot.chat(user_qu…

采用内存局部性分配有什么好处?

内存分配时的局部性分配&#xff08;Locality of Allocation&#xff09;是指将相关的内存对象分配在相邻或相近的内存区域中。这种分配策略在现代计算机系统中具有显著的好处&#xff0c;主要体现在以下几个方面&#xff1a; 1. 提高缓存命中率 现代计算机系统依赖于多级缓存…

【Dubbo+Zookeeper】——SpringBoot+Dubbo+Zookeeper知识整合

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大二学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…

使用阿里云操作系统控制台排查内存溢出

引言 操作系统控制台是阿里云最新推出的一款智能运维工具&#xff0c;专为提升运维效率、优化服务器管理而设计。它集成了多种运维管理功能&#xff0c;包括操作系统助手、插件管理器以及其他实用工具&#xff0c;为用户提供一站式的运维解决方案。无论是个人开发者还是企业运…

3.3.2 Proteus第一个仿真图

文章目录 文章介绍0 效果图1 新建“点灯”项目2 添加元器件3 元器件布局接线4 补充 文章介绍 本文介绍&#xff1a;使用Proteus仿真软件画第一个仿真图 0 效果图 1 新建“点灯”项目 修改项目名称和路径&#xff0c;之后一直点“下一步”直到完成 2 添加元器件 点击元…

深入了解Linux —— 调试程序

前言 我们已经学习了linux下许多的工具&#xff0c;vim、gcc、make/makefile等&#xff1b; 已经能够在linux写代码&#xff0c;并且进行编译运行&#xff0c;让程序在linux下跑起来。 但是&#xff0c;如果我们在写代码的时候遇见了错误&#xff1b;但是我们并不知道错误在哪&…

Hive-优化(语法优化篇)

列裁剪与分区裁剪 在生产环境中&#xff0c;会面临列很多或者数据量很大时&#xff0c;如果使用select * 或者不指定分区进行全列或者全表扫描时效率很低。Hive在读取数据时&#xff0c;可以只读取查询中所需要的列&#xff0c;忽视其他的列&#xff0c;这样做可以节省读取开销…