实现了一下CSRF原来没有那么简单,网络安全零基础必看漏洞挖掘教程!

一、前言

之前面试经常被问到 CSRF, 跨站请求伪造

大概流程比较简单, 大概就是用户登录了A页面,存下来登录凭证(cookie), 攻击者有诱导受害者打开了B页面, B页面中正好像A发送了一个跨域请求,并把cookie进行了携带, 欺骗浏览器以为是用户的行为,进而达到执行危险行为的目的,完成攻击

上面就是面试时,我们通常的回答, 但是到底是不是真是这样呢? 难道这么容易伪造吗?于是我就打算试一下能不能实现

二、实现

接下来,我们就通过node起两个服务 A服务(端口3000)和B服务(端口4000), 然后通过两个页面 A页面、和B页面模拟一下CSRF。

我们先约定一下 B页面是正常的页面, 起一个 4000 的服务, 然后 A页面为伪造者的网站, 服务为3000

先看B页面的代码, B页面有一个登录,和一个获取数据的按钮, 模拟正常网站,需要登录后才可以获取数据

<body><div>正常 页面B<button onclick="login()">登录</button><button onclick="getList()">拿数据</button><ulclass="box"></ul><divclass="tip"></div></div></body><script>asyncfunctionlogin(){constresponse=awaitfetch("http://localhost:4000/login",{method:"POST",});constres=awaitresponse.json();console.log(res,"writeCookie");if(res.data==="success"){document.querySelector(".tip").innerHTML="登录成功, 可以拿数据";}}asyncfunctiongetList(){constresponse=awaitfetch("http://localhost:4000/list",{method:"GET",});if(response.status===500){document.querySelector(".tip").innerHTML="cookie失效,请先登录!";document.querySelector(".box").innerHTML="";}else{document.querySelector(".tip").innerHTML="";constdata=awaitresponse.json();lethtml="";data.map((el)=>{html+=`<div>${el.id}-${el.name}</div>`;});document.querySelector(".box").innerHTML=html;}}</script>

在看B页面的服务端代码如下:

constexpress=require("express");constapp=express();app.use(express.json());// jsonapp.use(express.urlencoded({extends:true}));// x-www-form-urlencodedapp.use((req,res,next)=>{res.header("Access-Control-Allow-Origin","*");// 允许客户端跨域传递的请求头res.header("Access-Control-Allow-Headers","Content-Type");next();});app.use(express.static("public"));app.get("/list",(req,res)=>{constcookie=req.headers.cookie;if(cookie!=="user=allow"){res.sendStatus("500");}else{res.json([{id:1,name:"zhangsan"},{id:2,name:"lisi"},]);}});app.post("/login",(req,res)=>{res.cookie("user","allow",{expires:newDate(Date.now()+86400*1000),});res.send({data:"success"});});app.post("/delete",(req,res)=>{constcookie=req.headers.cookie;if(req.headers.referer!==req.headers.host){console.log("should ban!");}if(cookie!=="user=allow"){res.sendStatus("500");}else{res.json({data:"delete success",});}});app.listen(4000,()=>{console.log("sever 4000");});

B 服务有三个接口, 登录、获取列表、删除。再触发登录接口的时候,会像浏览器写入cookie, 再删除或者获取列表的时候,都先检测有没有将指定的cookie传回,如果有就认为有权限

然后我们打开http://localhost:4000/B.html先看看B页面功能是否都正常

我们看到此时 B 页面功能和接口都是正常的, cookie 也正常进行了设置,每次获取数据的时候,都是会携带cookie到服务端校验的

那么接下来我们就通过A页面,起一个3000端口的服务,来模拟一下跨域情况下,能否完成获取 B服务器数据,调用 B 服务器删除接口的功能

A页面代码

<body><div>伪造者页面A<form action="http://localhost:4000/delete"method="POST"><input type="hidden"name="account"value="xiaoming"/></form><script>// 这行可以放到控制台执行,便于观察效果// document.forms[0].submit();</script></div><ulclass="box"></ul><divclass="tip"></div></body>

A页面服务端代码

<body><div>伪造者页面A<form action="http://localhost:4000/delete"method="POST"><input type="hidden"name="account"value="xiaoming"/></form><script>// 这行可以放到控制台输入// document.forms[0].submit();</script><script src="http://localhost:4000/list"></script></div></body>

于是在我们 访问http://localhost:3000/A.html页面的时候发现, 发现list列表确实,请求到了, 控制台输入document.forms[0].submit()时发现,确实删除也发送成功了, 是不是说明csrf就成功了呢, 但是其实还不是, 关键的一点是, 我们在B页面设置cookie的时候, domain设置的是localhost那么其实在A页面, 发送请求的时候cookie是共享的状态, 真实情况下,肯定不会是这样, 那么为了模拟真实情况, 我们把http://localhost:3000/A.html改为http://127.0.0.1:3000/A.html, 这时发现,以及无法访问了, 那么这是怎么回事呢, 说好的,cookie 会在获取过登录凭证下, 再次访问时可以携带呢。

于是,想了半天也没有想明白, 难道是浏览器限制严格进行了限制, 限制规避了这个问题?难道我们背的面试题是错误的?

有知道的小伙伴,欢迎下方讨论

三、 sameSite 设置

其实上面的问题无法实现 CSRF 是由于 SameSite 的设置问题, 其实关键是要设置SameSite=None简单看一下下面三个设置的区分

  • None: 通常用于处理第三方提供的资源或服务,白话就是不受域的限制,不同域间可以传递身份验证凭证(可以做单点登录), 但是要配合Secure标志, 即实用 HTTPS 协议

  • Strict: 严格模式,完全禁止,只有自己网站的请求发送cookie

  • Lax:浏览器的默认值, 用户从外部导航到你的网站时,可以发送cookie

接下来我们就把上面的 B 服务进行改造, 再设置cookie的时候, 同时设置 sameSite 和 Secure

app.post("/login",(req, res)=>{res.cookie("user","allow",{expires: new Date(Date.now()+86400*1000), sameSite:"none", secure: true,});res.send({data:"success"});});

然后再次打开http://127.0.0.1:3000/A.html会发现 cookie 正常设置到了浏览器,

我们再次在控制台 输入document.forms[0].submit()发现删除操作也正常执行了

如图,我们就完成了 CSRF 攻击

四、总结

CSRF —— 跨域请求伪造, 顾名思义,攻击是发生在第三方页面, 利用了浏览器在跨域的情况下,在一些跨域的请求时(如 script 、 img、 form 表单提交、 a标签等)可以携带cookie的特性, 使得一些伪造的构建请求可以执行成功, 进而对正常网页造成危害的行为。我们通过代码也能看出来, 其实现代浏览器对跨域cookie的限制比较多了, 但是在一些情况下,依然可以发生, 比如设置sameSite: None时,虽然会增加安全风险, 但是 samesite为 None 又有一些场景需要跨域下可以共享cookie,比如单点登录、内嵌广告、资源时, 所以无法完全禁止, 由此我们就可以总结一些避免CSRF攻击的手段了,

  1. 使用同源策略, 限制不同来源直接资源共享

  2. 检查 Refer 头部, 设置白名单(并不保险,比如 a标签可以设置 rel=“noreferrer” 绕开refer检查

  3. 使用 CSRF Token 每个用户会话设置一个不可预测 唯一的 token,每次请求校验

  4. 尽量使用 POST 和 其他安全的HTTP方法, 不在 GET 请求中实现数据写入操作

  5. 敏感操作,增加验证码二次验证

  6. 服务端把 Cookie 的SameSite 属性设置为 Lax

  7. 表单提交增加 csrfToken 隐藏字段

额外:由于CSRF攻击原理是浏览器自动携带 Cookie, 如果放开跨站Cookie有CSRF 风险,但是不放开又无法做单点登录, 所以对于SPA应用来说, JWT 认证的方式更好一些,token 会在Authorization头部进行传递

网络安全学习资源分享:

给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,请看下方扫描即可前往获取


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

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

相关文章

百度网盘直链解析工具:3步实现全速下载的完整指南

百度网盘直链解析工具&#xff1a;3步实现全速下载的完整指南 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 在资源分享日益频繁的今天&#xff0c;百度网盘已成为存储和传播…

唐山英语雅思培训辅导机构推荐、2026年权威出国雅思课程中心学校口碑排行榜 - 老周说教育

基于2026年雅思考试趋势、行业权威标准及唐山本地考生核心需求,本次开展全面深度测评,聚焦雅思培训选课难题,从优质课程供给、高分提分逻辑、技巧传授专业性、性价比适配、个性化方案设计等核心维度,筛选出靠谱且实…

VirtualMonitor虚拟显示器:构建高效多屏工作环境的软件解决方案

VirtualMonitor虚拟显示器&#xff1a;构建高效多屏工作环境的软件解决方案 【免费下载链接】VirtualMonitor 项目地址: https://gitcode.com/gh_mirrors/vi/VirtualMonitor VirtualMonitor虚拟显示器是一款基于软件实现的虚拟显示技术&#xff0c;能够在不增加物理硬件…

智能音箱Docker部署终极指南:5步构建全屋音乐系统

智能音箱Docker部署终极指南&#xff1a;5步构建全屋音乐系统 【免费下载链接】xiaomusic 使用小爱同学播放音乐&#xff0c;音乐使用 yt-dlp 下载。 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaomusic 还在为智能音箱的音乐资源有限而苦恼吗&#xff1f;通…

告别文献迷宫!宏智树 AI:一键解锁文献综述的学术透视眼

还在对着成百上千篇文献抓耳挠腮&#xff0c;分不清核心观点与边缘研究&#xff1f;还在为文献综述逻辑混乱、引用不规范被导师反复打回&#xff1f;还在担心自己的综述只是 “观点堆砌”&#xff0c;缺乏学术深度和创新视角&#xff1f;作为深耕论文写作科普的教育博主&#x…

5分钟极速部署AzerothCore-WoTLK服务器:Docker容器化实战指南

5分钟极速部署AzerothCore-WoTLK服务器&#xff1a;Docker容器化实战指南 【免费下载链接】azerothcore-wotlk Complete Open Source and Modular solution for MMO 项目地址: https://gitcode.com/GitHub_Trending/az/azerothcore-wotlk 还在为魔兽世界私服的复杂部署流…

R3nzSkin深度解析:英雄联盟内存换肤技术揭秘

R3nzSkin深度解析&#xff1a;英雄联盟内存换肤技术揭秘 【免费下载链接】R3nzSkin Skin changer for League of Legends (LOL).Everyone is welcome to help improve it. 项目地址: https://gitcode.com/gh_mirrors/r3n/R3nzSkin R3nzSkin作为一款革命性的英雄联盟换肤…

【实战项目】 轻量化图像识别模型的推理延迟优化研究

运行效果:https://lunwen.yeel.cn/view.php?id=5905 轻量化图像识别模型的推理延迟优化研究摘要:随着人工智能技术的快速发展,轻量化图像识别模型在移动设备和嵌入式系统中的应用越来越广泛。然而,这些模型的推理…

AKShare金融数据获取终极指南:快速掌握免费量化数据源

AKShare金融数据获取终极指南&#xff1a;快速掌握免费量化数据源 【免费下载链接】akshare 项目地址: https://gitcode.com/gh_mirrors/aks/akshare 还在为金融数据获取而烦恼吗&#xff1f;面对复杂的API接口和付费数据源&#xff0c;很多量化投资者和研究人员感到束…

别再被AI忽悠了!大模型开发避坑指南,RAG+Agent让你的程序不再一本正经胡说八道

01 大语言模型发展历程摘要 大语言模型的发展历程&#xff1a; 2017年具有革命性的Transformer架构开始&#xff0c;解决了早期模型&#xff08;诸如循环神经网络&#xff08;RNN&#xff09;和长短期记忆网络&#xff08;LSTM&#xff09;&#xff09;在处理长距离依赖和顺…

如何快速解锁B站缓存视频:m4s-converter终极使用指南

如何快速解锁B站缓存视频&#xff1a;m4s-converter终极使用指南 【免费下载链接】m4s-converter 将bilibili缓存的m4s转成mp4(读PC端缓存目录) 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 还在为B站缓存视频只能在特定客户端播放而烦恼吗&#xff1f;…

AI 写论文哪个软件最好?实测宏智树 AI:解锁毕业论文高效写作的底层逻辑

毕业季的论文写作战场&#xff0c;“AI 写论文哪个软件最好” 的灵魂拷问&#xff0c;总能在高校社群里掀起热议。有人被通用 AI 的 “文献幻觉” 坑到查重超标&#xff0c;有人因工具功能割裂反复切换平台&#xff0c;还有人栽在 AIGC 检测的隐形门槛上。作为深耕论文写作科普…

呼和浩特英语雅思培训辅导机构推荐,2026年权威出国雅思课程中心学校口碑排行榜 - 老周说教育

在雅思备考赛道中,考生常面临多重困境:基础差异大导致选课无方向,缺乏系统技巧指导使提分效率低下,优质教育机构鱼龙混杂难以甄别,既追求性价比又渴望个性化提分方案。为帮助呼和浩特考生精准避坑,本次结合权威教…

唐山英语雅思培训辅导机构推荐;2026年权威出国雅思课程中心学校口碑排行榜 - 老周说教育

基于2026年雅思考试趋势、行业白皮书及唐山本地考生真实反馈,我们开展了全面深度测评,聚焦雅思培训选课核心痛点——多数考生面临提分瓶颈、优质教育机构筛选困难、个性化方案缺失、性价比失衡等问题,难以精准匹配靠…

完全免费!让老旧Mac焕发新生的终极升级指南

完全免费&#xff01;让老旧Mac焕发新生的终极升级指南 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 还在为苹果官方停止支持的Mac设备发愁吗&#xff1f;您的2012-2015…

PotPlayer字幕翻译插件:零基础打造完美双语观影体验

PotPlayer字幕翻译插件&#xff1a;零基础打造完美双语观影体验 【免费下载链接】PotPlayer_Subtitle_Translate_Baidu PotPlayer 字幕在线翻译插件 - 百度平台 项目地址: https://gitcode.com/gh_mirrors/po/PotPlayer_Subtitle_Translate_Baidu 还在为外语视频的字幕困…

探索三菱FX3U两轴标准程序:XZ轴控制全解析

三菱FX3U两轴标准程序&#xff0c;XZ两轴&#xff0c;包含轴点动&#xff0c;回零&#xff0c;相对与绝对定位&#xff0c;只要弄明白这个程序&#xff0c;就可以非常了解整个项目的程序如何去编写&#xff0c;从哪里开始下手在自动化控制项目里&#xff0c;三菱FX3U系列PLC应用…

呼和浩特英语雅思培训辅导机构推荐;2026年权威出国雅思课程中心学校口碑排行榜 - 老周说教育

基于2026年雅思考试趋势、呼和浩特本地考生需求及2000+学员调研数据,本次开展全面深度测评,聚焦雅思培训核心痛点——考生普遍面临选课迷茫、优质教育机构甄别困难、提分技巧匮乏、个性化方案缺失等问题,难以在众多…

3大实战场景解析:i茅台智能预约系统如何让抢购成功率翻倍

3大实战场景解析&#xff1a;i茅台智能预约系统如何让抢购成功率翻倍 【免费下载链接】campus-imaotai i茅台app自动预约&#xff0c;每日自动预约&#xff0c;支持docker一键部署 项目地址: https://gitcode.com/GitHub_Trending/ca/campus-imaotai 还在为i茅台预约排队…

国产化替代优选:2026电催化原位池优质厂家推荐,技术实力、市场口碑与定制化服务对比 - 品牌推荐大师1

电催化原位池作为X射线吸收精细结构(XAFS)技术的核心配套装置,能够在电化学反应过程中原位追踪催化剂的原子级结构演变,是能源催化、材料科学等领域前沿研究的关键工具。本报告从产品介绍、技术实力、市场口碑与定…