前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >web安全——聊聊csrf跨站请求伪造

web安全——聊聊csrf跨站请求伪造

作者头像
蛋蛋编程手记
发布2022-12-12 21:18:20
3140
发布2022-12-12 21:18:20
举报
文章被收录于专栏:蛋蛋编程手记蛋蛋编程手记

和xss能直接读取用户浏览器里面的身份信息不一样,csrf是通过旁门左道借到用户的登录状态,从而完成一些危险的操作。

csrf,跨站请求伪造。

以xx网的支付举例,攻击者必须非常清楚xx网的支付接口。接口的url是什么,用get还是post还是其他请求方式,需要哪些参数等等。

这里假设xx网的支付接口相对简单,只有用户登录一个要求。攻击者在知道了所有接口细节以后,只要伪造登录信息就可以实现攻击获利了。

那具体怎么操作呢?请接着往下看。

攻击者先搞了一个网页,并把链接通过邮件、短信等形式发布了出去,只要内容足够诱惑,就会有人点击这个链接,从而进入到攻击者精心构造的网页中。

以下是网页的具体内容

<img src="http://www.xx.com/transferMoney?num=1000&toUserId=10">

补充一下,xx网的转账接口url是http://www.xx.com/transferMoney,需要转账金额num以及对方账号toUserId,以get请求的方式传递。

这里能攻击成功的必要条件是用户登录了xx网并且登录状态还没有失效,然后用户点击了攻击链接进入了攻击网页。

下面我们分析下csrf的原理。

用户登录成功后服务器会把sessionId存储到用户浏览器的cookie中。后续请求浏览器会把cookie自动带到服务端,服务端根据cookie中的sessionId来判断用户的登录状态以及身份信息。

当然不同网站的cookie是隔离开的,访问攻击网页的时候是不会把xx网的cookie带给攻击网页的服务器的。但是你在攻击网页里面去访问xx网(上面的例子,攻击网页加载xx网的图片资源),浏览器还是会把xx网的cookie发给xx网的服务器。这样攻击网页就是借用了用户的登录信息实现了转账的操作。

所以根本原因还是xx网服务端无法识别到底转账行为是发生在xx网页面上的用户自发行为,还是发生在其他攻击网页上的隐藏操作。

提醒一下,这里xx网的接口是get还是post影响不大。get接口可以通过img来加载,post接口可以通过隐藏表单提交请求,甚至还可以通过jsonp来跨域提交。

那么,我们怎么防范csrf攻击呢?

​最简单的方法就是换一种鉴权方式,不要用sessionId这种方式,而是采用token认证的方式。

而且前端token不要存储在cookie中,而是存储到localstorage中。

每次前端发起请求都把token取出来放到请求头中,后端对这个token进行验证来判断用户的登录状态和权限信息。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-12-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 蛋蛋编程手记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档