当前位置:网站首页>Web系统常见安全漏洞介绍及解决方案-CSRF攻击
Web系统常见安全漏洞介绍及解决方案-CSRF攻击
2022-07-31 09:50:00 【web15286201346】
??博客主页: – 生命不息,折腾不止
??订阅专栏:『Web安全』
??如觉得博主文章写的不错或对你有所帮助的话,还望大家多多支持呀! ??关注、点赞??、收藏??、评论。
漏洞档案
简介
CSRF跨站请求伪造,全称Cross-site request forgery,是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账、改密等)。CSRF是Web安全中最容易被忽略的一种攻击方式,但某些时候却能产生强大的破坏性。
CSRF 攻击原理
1用户打开浏览器,访问登陆受信任的A网站2在用户信息通过验证后,服务器会返回一个cookie给浏览器,用户登陆网站A成功,可以正常发送请求到网站A3用户未退出网站A,在同一浏览器中,打开一个危险网站B4网站B收到用户请求后,返回一些恶意代码,并发出请求要求访问网站A5浏览器收到这些恶意代码以后,在用户不知情的情况下,利用cookie信息,向网站A发送恶意请求,网站A会根据cookie信息以用户的权限去处理该请求,导致来自网站B的恶意代码被执行
伪造GET/POST请求
在CSRF攻击流行之初,曾经很多人认为CSRF只能由GET请求发起,因此很多开发者认为只要把重要的操作改成只允许POST请求就能防止CSRF攻击。
这种错误的观点形成的原因在于,大多数CSRF发起攻击时,使用的都是 //
在2007年Gmail CSRF漏洞攻击过程中安全研究者pdp展示了这个技巧:
首先用户需要登录Gmail账户以便获取Gmail的临时Cookie,然后攻击者诱使用户访问一个恶意页面,在这个恶意页面中隐藏了一个iframe,iframe的地址指向pdp写的一个恶意链接,这个链接的实际作用就是把参数生成一个POST表单并提交。pdp的攻击脚本会在邮箱的Filter中新建一条规则,把所有带附件的邮件都转发到攻击者指定的邮箱,由于浏览器中已经存在Gmail的临时Cookie,所以这个请求会成功。
CSRF 蠕虫
2008年9月百度曾经受到CSRF蠕虫病毒攻击,漏洞出现在百度用户中心的发送短消息功能中:
http://msg.baidu.com/?ct=22&cm=MailSend&tn=bmSubmit&sn=用户账户&con=消息内容
这个链接只要修改参数sn即可对指定的用户发送短消息,而攻击者发现另一个接口能查询出某个用户的所有好友,将两者结合起来,可以组成一个CSRF Worm-让一个百度用户查看恶意页面后,将给他的所有好友发送一条短消息,然后这个短消息中又包含一张图片,其地址再次指向CSRF页面,使得这些好友再次将消息发给他们的好友,这个Worm因此得以传播。这个蠕虫很好的展示了CSRF的破坏性-即使没有Xss漏洞,仅仅是CSRF也是能够发起大规模蠕虫攻击的
CSRF 防御
下面看看有什么方法可以防御这种攻击。
1.验证码
验证码被认为是对抗CSRF攻击最简洁而有效的防御方法。
CSRF攻击的过程,往往是在用户不知情的情况下构造了网络请求,而验证码强制用户必须与应用进行交互才能完成最终请求。但是很多时候,出于对用户体验考虑,网站不能给所有的操作都加上验证码,因此验证码只能作为防御CSRF的一种辅助手段,而不能作为最主要的解决方案。
2.Referer Check
Referer Check即通过验证 HTTP请求头中的Referer 字段检查请求是否来自合法的“源”,检查Referer是否合法来判断用户是否被CSRF攻击。HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。比如一个发博客的操作,正常情况下需要先登录到发博客页面,提交“发布”的表单时Referer的只必然是发博客表单所有的页面,如果Referer的值不是这个页面,甚至不是发博客的域,则很有可能受到CSRF攻击。
Referer Check的缺陷在于,服务器并非什么时候都能够取到Referer,很多用户(或浏览器)出于隐私保护的考虑,限制了Referer的发送。
3.使用token验证
CSRF为什么能攻击成功?其本质原因时重要操作的所有参数都是可以被攻击者猜测到的。现在业界对CSRF的防御,一致的做法就是增加一个参数–Token。Token必须足够随机(使用足够安全的随机数生成算法),它应该作为一个“秘密”存在于服务器和浏览器中,不被第三方知晓。由于Token的存在,攻击者无法再构造出一个完整的url实施攻击。实际应用时,Token可以放在用户的Session或者浏览器的Cookie中,在提交请求时,服务器只需验证表单中的Token与用户传过来的Token(Session或Cookie中)是否一致,如果一致则认为是合法请求;如果不一致,则认为请求不合法,可能发生了CSRF攻击。
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
- 自定义v-drag指令(横向拖拽滚动)
- 7. JS ES6新增语法 new Map详讲,还有一道代码实战案例帮你快上手new Map
- 项目管理工具之燃尽图:动态考核团队工作能力
- JS中原型和原型链的详细讲解(附代码示例)以及 new关键字具体做了什么的详细讲解
- Redis集群-哨兵模式原理(Sentinel)
- spark过滤器
- 恋爱期间的赠与能否撤销
- Solve rpc error: code = Unimplemented desc = method CheckLicense not implemented
- Are postgresql range queries faster than index queries?
- 【机器学习】用特征量重要度(feature importance)解释模型靠谱么?怎么才能算出更靠谱的重要度?
猜你喜欢
随机推荐
各位大佬,sqlserver 支持表名正则匹配吗
多个js雷达图同时显示
Centos7 install mysql5.7
Business-(Course-Chapter-Subsection) + Course Publishing Some Business Ideas
第七章
Come n times with the sword--05. Replace spaces
【TCP/IP】网络模型
踩水坑2 数据超出long long
Linux 创建mysql数据库并创建账号密码
生成随机数
Implement a thread pool
来n遍剑指--05. 替换空格
js department budget and expenditure radar chart
Data Middle Office Construction (6): Data System Construction
js滚动条滚动到指定元素
VMware下安装win10启动后进入Boot Manger界面如何解决
vue element form表单规则校验 点击提交后直接报数据库错误,没有显示错误信息
Redis Cluster - Sentinel Mode Principle (Sentinel)
Use turtle to draw buttons
&#x开头的是什么编码?









