当前位置: 首页 > article >正文

【网络安全】CSRF跨站请求伪造:从原理到防御全解析

前言如果说XSS是利用了用户对网站的信任那么CSRFCross-Site Request Forgery跨站请求伪造则是利用了网站对用户浏览器Cookie的信任。1. 什么是CSRFCSRF全称Cross-Site Request Forgery攻击者诱导受害者在已登录目标网站的情况下点击一个恶意链接或访问一个恶意网页从而伪造受害者的身份向目标网站发送非本意的请求。一句话总结攻击者盗用了你的身份以你的名义发送恶意请求。1.1 举个栗子假设你登录了银行网站 bank.com你的浏览器中保存了有效的Session Cookie。此时你点开了一个攻击者发送的钓鱼邮件邮件中隐藏了一个请求htmlimg srchttp://bank.com/transfer?toattackeramount10000浏览器会自动加载这个图片携带你的Cookie向银行发送转账请求。钱就被转走了。1.2 CSRF的核心特点特点 说明利用身份 受害者的登录态Cookie触发方式 受害者无感知点击恶意链接或页面危害范围 执行敏感操作修改密码、转账、发表言论等2. CSRF与XSS的区别很多人容易混淆这两个漏洞其实它们的本质完全不同对比维度 XSS CSRF信任关系 用户信任网站 网站信任用户浏览器攻击位置 目标网站内部 第三方恶意网站是否需要脚本执行 需要JavaScript执行 不需要仅需构造请求防御重点 输出转义、CSP Token校验、Referer校验简单理解XSS是在目标网站内部执行恶意脚本CSRF是从外部诱导用户向目标网站发送请求3. CSRF的分类3.1 GET型CSRF最常见的形式恶意请求直接拼接在URL中。html!-- 通过图片加载触发 --img srchttp://target.com/delete?id123!-- 或通过超链接诱导点击 --a hrefhttp://target.com/changePwd?newPwd123456点击领取红包/a3.2 POST型CSRF当敏感操作为POST请求时攻击者需要构造一个自动提交的表单。htmlform actionhttp://target.com/transfer methodPOST idhackinput typehidden nameto valueattackerinput typehidden nameamount value10000/formscriptdocument.getElementById(hack).submit();/script3.3 JSON型CSRF进阶当API使用JSON格式接收数据时传统的表单提交无法生效。此时可利用form的enctypetext/plain或Fetch API进行绕过。4. CSRF的利用方式4.1 经典POCProof of Concepthtml!DOCTYPE htmlhtmlheadtitleCSRF Demo/title/headbodyh1恭喜中奖/h1img srchttp://victim.com/api/transfer?tohackeramount10000 styledisplay:none!-- 如果是POST请求 --form actionhttp://victim.com/api/transfer methodPOST idcsrf-forminput typehidden nameto valuehackerinput typehidden nameamount value10000/formscriptdocument.getElementById(csrf-form).submit();/script/body/html4.2 利用iframe进行隐蔽攻击htmliframe srchttp://victim.com/changePwd?newPwd123456 stylewidth:0;height:0;border:0/iframe4.3 结合XSS提升危害当XSS与CSRF结合时威力倍增XSS可以绕过CSRF Token通过读取页面中的TokenXSS可以自动发起CSRF攻击实现蠕虫式传播5. 防御方案、5.1 CSRF Token核心防御原理 CSRF Token工作原理1. 服务器在用户登录后生成一个随机、唯一的 CSRF Token并将其存储在会话中或某个安全的地方如 sessionStorage2. 服务器将 Token 发送给客户端3. 客户端在发起任何敏感操作的请求时都必须将这个 Token 放在HTTP 请求头或 POST 请求体中4. 服务器接收到请求后会验证请求中的 Token 是否与服务器上存储的 Token 相匹配。如果不匹配则拒绝请求实现要点html!-- 表单中包含Token --input typehidden namecsrf_token value随机字符串为什么有效攻击者无法获取当前用户的Token受同源策略保护。5.2 SameSite Cookie属性现代浏览器利器设置Cookie的SameSite属性限制第三方请求携带Cookie。SameSite值 效果Strict 仅允许同站请求携带Cookie最安全Lax 同站请求携带部分跨站GET请求也可携带推荐None 允许所有跨站请求携带需配合SecurehttpSet-Cookie: sessionidxxx; SameSiteLax; Secure5.3 Referer/Origin校验检查请求头中的Referer或Origin验证请求来源是否为可信域名。注意某些场景下Referer可能为空如HTTPS-HTTP需谨慎处理。5.4 双重Cookie验证将CSRF Token同时存储在Cookie中前端读取后放在请求头或请求体中后端比对两者是否一致。5.5 验证码/二次确认对于高风险操作转账、修改密码、删除账号强制要求输入验证码或进行二次认证。6. 如何绕过token1、删除Token参数如果后端没有严格校验Token是否存在服务器可能会直接处理这个没有Token的请求2、将Token值置空如果后端没有对Token值进行非空判断也可能导致绕过3、复用旧的Token有些系统生成的Token在用户会话中是固定的或者允许在一个会话中重复使用同一个Token。攻击者可以先在自己的浏览器上获取一个合法Token然后诱导受害者使用这个Token来发起请求4、配合XSS漏洞窃取Token如果目标网站同时存在XSS跨站脚本攻击漏洞攻击者可以注入恶意脚本让脚本去读取当前页面中的Token值例如从隐藏域或Cookie中然后将窃取到的Token连同恶意请求一起发出。5、Token与Session未绑定如果服务器验证了Token的存在性和正确性但没有将该Token与当前用户的会话Session进行强绑定可以先自己登录网站获取一个属于自己的合法Token然后在构造针对受害者的CSRF攻击POC漏洞验证代码时附上自己的这个Token。7.安全开发Checklist:在开发过程中建议遵循以下原则所有敏感操作POST/PUT/DELETE必须携带CSRF TokenToken必须随机、不可预测、有效期合理Cookie设置SameSiteLax或Strict高风险操作增加二次验证验证码、短信验证避免使用GET请求执行敏感操作校验Referer/Origin设置白名单

相关文章:

【网络安全】CSRF跨站请求伪造:从原理到防御全解析

前言 如果说XSS是利用了用户对网站的信任,那么CSRF(Cross-Site Request Forgery,跨站请求伪造)则是利用了网站对用户浏览器(Cookie)的信任。 1. 什么是CSRF? CSRF,全称Cross-Site Re…...

论文初稿不用熬!Paperzz AI 毕业论文写作:让本科生 4 步搞定万字原创文稿

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿paperzz - 毕业论文-AIGC论文检测-AI智能降重-ai智能写作https://www.paperzz.cc/dissertation 又到毕业季,“写不出论文” 成了本科生朋友圈的高频吐槽:对着空白文档发呆几天&#x…...

解锁论文写作新范式:Paperzz AI 全流程赋能,让本科毕设从 “启动” 到 “成稿” 高效落地

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿paperzz - 毕业论文-AIGC论文检测-AI智能降重-ai智能写作https://www.paperzz.cc/dissertation 当毕业季的钟声敲响,不少本科生正陷入论文写作的僵局:对着空白文档无从下笔、文献检索…...

网络工程师日记--企业内外网访问控制与网络架构搭建实践

前言企业网络搭建与运维中,合理的网络架构分层与精细化的访问控制策略是保障网络安全、提升业务可用性的核心。本文结合实际网络拓扑场景,从架构设计、需求分析、策略配置三个维度,讲解企业内网与外网的访问控制实现及网络架构搭建要点学习目…...

解锁论文写作新姿势:Paperzz AI 如何让本科毕业论文从「0 到 1」高效落地

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿paperzz - 毕业论文-AIGC论文检测-AI智能降重-ai智能写作https://www.paperzz.cc/dissertation 当毕业论文成为毕业季的「头号难题」,不少本科生都在重复着低效循环:对着空白文档发呆…...

浏览器自动化利器:OpenClaw控制Qwen3.5-4B-Claude填表单

浏览器自动化利器:OpenClaw控制Qwen3.5-4B-Claude填表单 1. 为什么需要浏览器自动化助手 在日常工作中,我们经常需要重复填写各种网页表单。从简单的注册页面到复杂的多步骤申请表,这些机械性操作不仅耗时耗力,还容易出错。作为…...

用ABAQUS玩转液压油缸模拟:基于CEL算法的加载模型

ABAQUS有限元模型:基于CEL算法的液压油缸加载模型。 使用ABAQUS有限元软件,基于CEL算法,模拟了液压油缸在荷载作用下,结构的受力和内部液体压强变化,其中油缸采用拉格朗日体,内部液体使用欧拉体&#xff0c…...

weixin258基于微信小程序的课堂点名系统springboot(文档+源码)_kaic

第5章 系统实现进入到这个环节,也就可以及时检查出前面设计的需求是否可靠了。一个设计良好的方案在运用于系统实现中,是会帮助系统编制人员节省时间,并提升开发效率的。所以在系统的编程阶段,也就是系统实现阶段,对于…...

pnpm 使用教程

现代 JavaScript 项目的首选包管理器 pnpm(performant npm)是一个快速、节省磁盘空间的包管理器,它通过全局存储和硬链接机制,解决了 npm 传统的依赖重复和“幽灵依赖”问题。本教程将带你从零开始掌握 pnpm 的核心用法&#xff0…...

PCB画板时的层数设置

在PCB设计领域,当我们说“几层板”的时候,指的就是电气层的数量(也就是导电的铜箔层数)。助焊层、阻焊层、丝印层、钻孔图这些,虽然也叫“层”,但它们是非电气层(或称辅助层)&#x…...

ABAQUS有限元模型:基于CEL算法的斜桩锤击入土模拟

ABAQUS有限元模型:基于cel算法的斜桩锤击入土模型。 使用ABAQUS有限元软件,基于CEL算法,模拟了斜桩通过锤击作用入土的情况,首先进行了土体的地应力平衡,然后对斜桩施加轴力方向的锤击荷载,以1.5s为循环&am…...

AI不再是聊天机器人!从《Agentic Design Patterns》汲取的5大核心启示,彻底重塑你的架构思维

大多数开发者还以为,生成式AI的终极答案就是把大模型参数堆得更大、提示词写得更聪明,就能解决一切生产力难题。但最近读完Antonio Gulli的《Agentic Design Patterns》,我突然意识到:我们过去两年其实只造出了“引擎”&#xff0…...

Kinaxis在2026年Gartner®供应链规划魔力象限报告中获评“领导者”

该项认可基于公司在“愿景完整性”与“执行能力”两大评估维度上的卓越表现 全球领先的供应链编排解决方案提供商Kinaxis Inc.(多伦多证券交易所代码:KXS)今日宣布,公司在《2026年Gartner面向离散行业的供应链规划解决方案魔力象限…...

新能源运维数字化方案:帮我吧助力企业实现全流程智能管控

在“双碳”目标的深入推进下,新能源产业迎来高速发展期,光伏、风电、储能、新能源汽车等领域的市场规模持续扩大,行业发展重心从“投建”转向“运营与服务”。对于新能源企业而言,设备分布广、终端用户分散、设备智能化程度高&…...

个人知识库构建:OpenClaw+GLM-4.7-Flash自动归档网页与文档

个人知识库构建:OpenClawGLM-4.7-Flash自动归档网页与文档 1. 为什么需要自动化知识管理 作为一个长期与技术文档打交道的开发者,我发现自己陷入了一个典型的知识管理困境:每天浏览的优质技术文章、收藏的GitHub仓库、订阅的RSS源越来越多&…...

基于模型的增程式混合动力汽车整车策略开发与建模

基于模型的整车策略开发思路、整车模型搭建流程,增程式混合动力汽车建模仿真模型,增程纯电,类似Nisson的e-power整车配置策略 具体内容包括:增程器模型、电机模型、电池模型,驾驶员模型,整车VCU控制模型等 …...

基于SpringBoot+Vue的AI智能客服系统开发实战:从H5输入到语言提问的完整实现

最近在做一个AI智能客服项目,客户要求既要能在H5页面里打字提问,又要能直接语音对话,后台还得有个清晰的管理界面。这听起来简单,但真做起来,从技术选型到具体实现,坑可真不少。今天就把这次从零到一搭建“…...

Switch玩家福音!用LDR6282芯片DIY便携屏,告别充电口盲插烦恼

Switch玩家福音!用LDR6282芯片DIY便携屏,告别充电口盲插烦恼 作为一名资深Switch玩家,每次在咖啡厅或朋友家想玩大屏游戏时,最头疼的就是要随身携带底座和一堆线材。直到我发现用LDR6282芯片可以自制支持双C口盲插的便携显示屏&am…...

linux条件变量封装(2026.3.24)

条件变量的wait让线程休眠&#xff0c;Signal随机唤醒一个线程&#xff0c;然后又立马锁上。#include<iostream> #include<pthread.h> #include"Mutex.hpp"namespace CondModule{using namespace MutexModule;class Cond{public:Cond(){pthread_cond_ini…...

OpenClaw设备控制:Qwen3-32B通过USB接口操作硬件实验

OpenClaw设备控制&#xff1a;Qwen3-32B通过USB接口操作硬件实验 1. 为什么选择OpenClaw做硬件控制&#xff1f; 去年夏天&#xff0c;我在工作室调试一个温控风扇项目时&#xff0c;发现传统嵌入式开发存在一个痛点&#xff1a;每次修改控制逻辑都需要重新烧录固件。当我偶然…...

OpenClaw文件管理术:GLM-4.7-Flash智能归类200+文档

OpenClaw文件管理术&#xff1a;GLM-4.7-Flash智能归类200文档 1. 为什么需要智能文件管理助手 作为一个长期与各种技术文档打交道的开发者&#xff0c;我的电脑桌面常年处于"灾难现场"状态。上周整理项目资料时&#xff0c;发现同一个技术方案的三个版本散落在下载…...

CosyVoice 2 目标音色替换技术解析:从原理到小白友好实现

音色替换&#xff0c;简单说就是让一段语音听起来像是另一个人在说话&#xff0c;但内容不变。这技术现在需求挺多的&#xff0c;比如虚拟主播、有声书、游戏角色配音&#xff0c;甚至一些辅助沟通的场景。但说实话&#xff0c;以前想自己搞一个&#xff0c;门槛不低。要么效果…...

DanKoe 视频笔记:个人商业模型:第三部分:如何将知识转化为价值

概述 在本节课中&#xff0c;我们将学习如何将你头脑中积累的知识和经验&#xff0c;转化为能够创造价值并带来收益的产品或服务。我们将探讨一个系统化的方法&#xff0c;帮助你从自我提升走向自我实现&#xff0c;并最终实现自我超越。 信息&#xff1a;新时代的基石 上一…...

【大模型学习】常见AI工作流框架组合

常见AI工作流框架组合**一、框架组合全景图****二、各组合深度分析****1. LangChain LangGraph&#xff08;大模型工程师首选&#xff09;****技术架构****实现复杂度****优缺点****推荐场景****2. LlamaIndex Flowise&#xff08;低代码RAG快速落地&#xff09;****技术架构…...

利用DeepSeek接口构建高并发智能客服系统的架构设计与性能优化

开篇&#xff1a;传统客服系统的三大痛点 最近在做一个智能客服项目&#xff0c;从零开始搭建了一套基于DeepSeek API的高并发系统。在项目初期调研时&#xff0c;我发现传统客服系统普遍存在几个让人头疼的问题&#xff0c;这也是我们决定采用新架构的主要原因。 首先最明显的…...

C语言中结构体指针如何用 -> 取子数据及链表应用示例

在C语言当中&#xff0c;指针箭头“->”看起来是简单的&#xff0c;然而&#xff0c;好多人在学到链表之际&#xff0c;会被它难住。此符号从本质上来说&#xff0c;那是从一个结构体指针里把内部数据取出的快捷途径&#xff0c;要理解它呀&#xff0c;得先弄明白变量、指针…...

想拥有专属的桌面宠物伙伴吗?DyberPet开源框架让个性化养成触手可及

想拥有专属的桌面宠物伙伴吗&#xff1f;DyberPet开源框架让个性化养成触手可及 【免费下载链接】DyberPet Desktop Cyber Pet Framework based on PySide6 项目地址: https://gitcode.com/GitHub_Trending/dy/DyberPet 你是否曾希望电脑桌面上能有一个可爱的虚拟伙伴&a…...

Yarle终极指南:3分钟完成Evernote到Markdown的无损迁移

Yarle终极指南&#xff1a;3分钟完成Evernote到Markdown的无损迁移 【免费下载链接】yarle Yarle - The ultimate converter of Evernote notes to Markdown 项目地址: https://gitcode.com/gh_mirrors/ya/yarle 还在为Evernote笔记迁移而烦恼吗&#xff1f;Yarle是您最…...

2026丨科学大百科:Java面试时问在项目开发时遇到最难的是什么问题,?怎么解决的?

​ 2026科学大百科:Java面试难题破解指南 典型难点分类与解决方案 高并发场景下的数据一致性 分布式系统中使用Redis与数据库的双写一致性是常见痛点。通过实现延迟双删策略结合本地消息表,确保最终一致性。代码示例: // 伪代码:延迟双删 public void updateData(key, val…...

2026最新Java面试,必问的十个AI面试题!标准答案+实战避坑,先码住!

​ 2026年Java面试必问的十大AI相关面试题:标准答案与实战避坑指南 随着AI技术的快速发展,Java开发者在面试中越来越多地遇到与AI结合的考题。以下是2026年Java面试中可能涉及的十大AI相关问题,涵盖标准答案、代码示例及实战避坑技巧。 1. 如何在Java中集成机器学习模型? …...