CSRF跨站请求伪造

一、CSRF跨站请求伪造

CSRF全拼为Cross Site Request Forgery,译为跨站请求伪造。

CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求。

包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账…

造成的问题:个人隐私泄露以及财产安全。

CSRF请求伪造的示意图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、CSRF防护

防护思路:

1、请求转账页面的时候,服务器响应转账页面,在cookie中设置一个csrf_token值(随机48位字符串)。

2、客户端在进行post请求的时候,在请求头中带上自定义的属性’X-CSRFToken’ ,值为cookie中的csrf_token值。(要注意的是,此时的post请求,浏览器还会自发带着cookie中csrf_token到服务器。)

3、服务器在接收到post请求的时候,首先验证响应头中的x-csrftoken值,和cookies中的csrf_token是不是一致,如果不一致,需要return,直接结束处理,不进行后续工作。

完整步骤:

先安装cookie-parser

生成n为随机字符串:

function getRandomString(n){var str="";while(str.length<n){str+=Math.random().toString(36).substr(2);}return str.substr(str.length-n)
}
getRandomString(48);  // 调用生成csrf_token

get请求转账页面的时候,在cookie中设置一个csrf_token值(随机48位字符串):

!!记得安装cookie-parser模块

if(req.method=="GET"){// 渲染转账页面的时候,同时在cookie中设置csrf_token//设置cookie和sessionlet csrf_token = getRandomString(48);res.cookie('csrf_token', csrf_token); res.render('temp_transfer');
}

接下来,在前端页面中,post请求时候带上自定义的属性’X-CSRFToken’ ,值为cookie中的csrf_token值:

$.ajax({url:'/transfer',type:'post',data:JSON.stringify(params),contentType:'application/json',headers:{'X-CSRFToken':getCookie('csrf_token')},success: function (resp) {....}
})....function getCookie(name) {   //获取cookie的函数var r = document.cookie.match("\\b" + name + "=([^;]*)\\b");return r ? r[1] : undefined;
}

最后回到服务器端,处理post请求的时候,判断响应头中的x-csrftoken值,和cookies中的csrf_token是不是一致,不一致就是CSRF验证不通过,直接return:

...
else if(req.method=="POST"){// 判断响应头中的x-csrftoken值,和cookies中的csrf_token进行对比console.log(req.headers["x-csrftoken"]);console.log(req.cookies["csrf_token"]);if((req.headers["x-csrftoken"] === req.cookies["csrf_token"])){console.log("csrf验证通过!");}else{res.send("csrf验证不通过!");return}// 以下可以开始正常处理post请求...}

三、对每一个POST请求都设置CSRF防护

实际上,不仅仅转账需要CSRF防护,每一个post请求都需要做csrf的防护措施。

webA项目中的app.js:

const router = express.Router();router.all('/', (req, res) => {if(req.method=="GET"){res.render('temp_login')}...
});
router.all('/transfer', (req, res) => {...else if(req.method=="POST"){let {to_account, money} = req.body;console.log(to_account, money);//执行转账功能: ....此处省略console.log("假装执行转账操作,将当前登录用户的钱转账到指定账户");console.log(`已经完成转账${money}元到账户${to_account}`);res.json({to_account,money});}
});
function csrfProtect(req, res, next){let method = req.methodif(method=="GET"){let csrf_token = getRandomString(48);res.cookie('csrf_token', csrf_token);next() //执行跳转到下一个函数执行,即app.use(beforeReq,router)中的下一个}else if(method=="POST"){// 判断响应头中的x-csrftoken值,和cookies中的csrf_token进行对比console.log(req.headers["x-csrftoken"]);console.log(req.cookies["csrf_token"]);if((req.headers["x-csrftoken"] === req.cookies["csrf_token"])){console.log("csrf验证通过!");next()}else{res.send("csrf验证不通过!!");return}}
}app.use(csrfProtect,router)

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

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

相关文章

升级 ubuntu_Ubuntu 19.04 已经到期!现有用户必须升级到 Ubuntu 19.10

Ubuntu 19.04 已在 2020 年 1 月 23 日到期&#xff0c;这意味着运行 Ubuntu 19.04 的系统将不再会接收到安全和维护更新&#xff0c;因此将使其容易受到攻击。-- Abhishek Prakash(作者)Ubuntu 19.04 发布于 2019 年 4 月 18 日。由于它不是长期支持(LTS)版本&#xff0c;因此…

Chapter7-3_BERT and its family - ELMo, BERT, GPT, XLNet, MASS, BART, UniLM, ELECTRA, and more

文章目录1 How to pre-train2 Predict next token3 Mask Input4 seq2seq的pre-train model5 ELECTRA6 Sentence Embedding本文为李弘毅老师【BERT and its family - ELMo, BERT, GPT, XLNet, MASS, BART, UniLM, ELECTRA, and more】的课程笔记&#xff0c;课程视频youtube地址…

JavaScript调试工具

JavaScript代码看起来总是要比Java、C#乱的多&#xff0c;可能是自己还不熟悉JavaScript编程&#xff0c;因此一款优秀的JavaScript调试器就显得格外重要。目前在网络和书上见到最多的有&#xff1a; 第一个&#xff1a;Microsoft Script Debugger: 集成在IE中的一款很原始的调…

python中split函数_python strip()函数和Split函数的用法总结

strip函数原型 声明&#xff1a;s为字符串&#xff0c;rm为要删除的字符序列. 只能删除开头或是结尾的字符或是字符串。不能删除中间的字符或是字符串。 s.strip(rm) 删除s字符串中开头、结尾处&#xff0c;位于 rm删除序列的字符 s.lstrip(rm) 删除s字符串中开头处&#xff0c…

express项目搭建 初始化详细步骤

案例 一、对每一个POST请求都设置CSRF防护 实际上&#xff0c;不仅仅转账需要CSRF防护&#xff0c;每一个post请求都需要做csrf的防护措施。 webA项目中的app.js&#xff1a; const router express.Router();router.all("/register",(res,req)>{.... })funct…

Chapter7-4_來自獵人暗黑大陸的模型 GPT-3

文章目录1 为何来自暗黑大陆2 GPT-3的野心3 GPT-3的效果4 Beyond GPT-3本文为李弘毅老师【來自獵人暗黑大陸的模型 GPT-3】的课程笔记&#xff0c;课程视频youtube地址&#xff0c;点这里&#x1f448;(需翻墙)。 下文中用到的图片均来自于李宏毅老师的PPT&#xff0c;若有侵权…

SetConsoleCtrlHandler() -- 设置控制台信号处理函数

http://www.groad.net/bbs/thread-8253-1-1.html 当你在命令行里工作时&#xff0c;经常会输入 Ctrl-C 这个组合键以停止程序的运行。SetConsoleCtrlHandler() 函数可以让一个或多个特定函数在接收到 Ctrl-C, Ctrl-break 这些与控制台有关的信号时得到执行。 BOOL WINAPI SetCo…

python提取txt中的字符串数据_python 从字符串中提取数值

python中用re.findall函数&#xff0c;里面写正则表达式 rootvdirectva:/home/lic_auto_scale# cat re.py import re test[10Mbps,100bps,6.7Gbps,0.8bps,10.562Kbps] for union in test : _sizere.findall(r\d\.*\d*,union) xusage re.findall(r\D*bps,union) print("si…

二、PHP框架Laravel学习笔记——路由的定义和控制器

一&#xff0e;路由的定义 什么是路由&#xff1f;路由就是提供接受 HTTP 请求的路径&#xff0c;并和程序交互的功能&#xff1b; 简单点理解&#xff0c;就是为了提供访问程序的 URL 地址&#xff0c;所做的一些设置工作&#xff1b; phpstorm 支持 cmd 操作&#xff0c;左…

Chapter7-5_Multilingual BERT

文章目录1 什么是Multilingual BERT2 Zero-shot Reading Comprehension3 Cross-lingual Alignment4 How alignment happens本文为李弘毅老师【Multilingual BERT】的课程笔记&#xff0c;课程视频youtube地址&#xff0c;点这里&#x1f448;(需翻墙)。 下文中用到的图片均来自…

deepin tim(wine)无法安装_浅析国产操作系统深度deepin

经过两天的努力&#xff0c;终于实现了win10下跟deepin 的双系统&#xff0c;经过我实际操作&#xff0c;发现win7环境下装双系统还是有问题的。虽然deepin系统也能安装成功&#xff0c;但是win系统却是无法顺利启动&#xff0c;一直卡在系统初始界面无限循环。而更换win10之后…

三、PHP框架Laravel学习笔记——路由参数、重定向、视图

一&#xff0e;路由参数 我们已经学习了部分路由参数的功能&#xff0c;比如动态传递{id}&#xff1b;那么&#xff0c;有时这个参数需要进行约束&#xff0c;我们可以使用正则来限定必须是数字&#xff1b; Route::get(task/read/{id}, TaskControllerread) ->where(id, …

Chapter7-6_Text Style Transfer

文章目录1 什么是Text Style Transfer2 Cycle GAN2.1 Gumbel-softmax2.2 Continuous Input for Discriminator2.3 Reinforcement Learning2.4 效果3 Star GAN4 Feature Disentangle5 Unsupervised Abstractive Summarization6 Unsupervised Translation7 Unsupervised Speech R…

Student学生管理系统

1.定义各个层 2.添加各个层之间的引用 DAL 层调用Model BLL层调用DAL和Model UI层调用BLL和Model层 Model层供各个层调用 3.根据数据库建立实体类,每张表对应一个实体类 4.在DAL层调用MyTool类和SQLhelper类,添加system.Configuration 引用 并编写app.config 在SqlHelper类调用…

一、PHP框架Laravel——入门和安装

一&#xff0e;版本化方案 Laravel 框架是一款简洁、优秀且优雅的 PHP 开发框架&#xff1b;Laravel 到底怎么读&#xff0c;由于不是真实的单词&#xff0c;导致争论较多目前已知&#xff1a;[lrəvel][lɑːrəvel][lɑːrvl]有这几种&#xff1b;Laravel 从 6.x 开始进入到…

iscsi没有可用于使用快速连接登陆的目标_【解密】5G商用在即 OPPO快速网络切换方法;高管宣布华为河图商标注册成功;小米折叠屏专利曝光 类似于摩托罗拉Razr...

1.【专利解密】5G商用在即 OPPO快速网络切换方法2.好消息&#xff01;高管宣布华为河图商标注册成功3.小米折叠屏专利曝光 类似于摩托罗拉Razr4.索尼Xperia提交新专利 上下双升降结构1.【专利解密】5G商用在即 OPPO快速网络切换方法【嘉德点评】OPPO发明的网络切换专利&#xf…

搞懂DEtection TRanformer(DETR)

文章目录1 bipartite matching loss2 模型总体框架2.1 backbone2.2 transformer2.2.1 encoder2.2.2 decoder2.2.3 prediction heads3 模型效果参考文献本文描述了笔者在阅读了一些文献之后&#xff0c;对 End-to-end Object Detection with Transformers(DETR) 的理解。DETR是一…

《软件测试》第五次作业

《构建执法》心得 本学期通过段炫宇老师的推荐与《软件测试》老师陈翠娟的教学&#xff0c;我阅读了《构建之法》。 整本书一开始写的是软件工程的发展史&#xff0c;从开始到应用&#xff0c;所经历的各种变化。接下来讲的是变成代码要懂得团体的力量&#xff0c;合作取得双赢…

四、PHP框架Laravel学习笔记——路由命名和分组

一&#xff0e;路由命名 给一个制定好的路由进行命名&#xff0c;可以生成 URL 地址或进行重定向&#xff1b; Route::get(task, TaskControllerindex)->name(task.index); 在控制器区域&#xff0c;使用助手函数 route()来获取路由生成的 URL 地址&#xff1b; //生成 ur…

echart 数据点可以加链接吗_地理可视化就这么简单、酷炫,蚂蚁金服AntV 空间数据可视化引擎 L72.0发布...

导读L7 是由蚂蚁金服 AntV 数据可视化团队推出的基于 WebGL 的开源大规模地理空间数据可视分析开发框架。L7 中的 L 代表 Location&#xff0c;7 代表世界七大洲&#xff0c;寓意能为全球位置数据提供可视分析的能力。L7 以图形符号学为理论基础&#xff0c;将抽象复杂的空间数…