中秋节时候我们的应用在短信验证码这块被恶意刷单,比如被用来做垃圾短信之类的,如果大规模被刷也能造成不小的损失。这还只是短信验证码,如果重要的API遭到CSRF的攻击,损失不可估量。所以紧急加班解决了CSRF的攻击问题。

CSRF是什么鬼?

CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。

CSRF能干嘛?

你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全。

CSRF特性?

依靠用户标识危害网站
利用网站对用户标识的信任
欺骗用户的浏览器发送HTTP请求给目标站点
另外可以通过IMG标签会触发一个GET请求,可以利用它来实现CSRF攻击。
CSRF原理
简单来说,CSRF必须经过两个步骤:
1、用户访问可信任站点A,并产生了相关的cookie;
2、用户在访问A站点时没有退出,同时访问了危险站点B;
大家同时访问多个网站是很正常的事情,所以也很容易遭到CSRF的攻击。
举个栗子:
某电商网站A,你购买时候支付的操作是:http://www.market.com/Transfer.php?bankId=11&money=1000;
某危险网站B,他有段代码是 <img src=http://www.market.com/Transfer.php?bankId=11&money=1000>

访问A支付后你会发现银行卡里面多扣了1000块钱,why?通过get方式,你在访问A网站进行支付操作时,A网站保存了你的cookie信息,如果B网站拿到了你的cookie或者他伪造的数据刚好就是cookie里的,就能伪造你的请求,进行同样的支付操作。
也许你会说,我换成post请求不就行了,但是如果你的server代码没有处理,一样可以进行伪造。
So,如何进行防御?
1、服务器端表单hash认证
在所有的表单里面随机生成一个hash,server在表单处理时去验证这个hash值是否正确,这样工作量比较大,我们之前所有的表单都没添加!!!,好几十个页面,这个当前处境不切实际
2、验证http Referer字段
根据HTTP协议,在HTTP头中有一个字段叫Referer,它记录了该HTTP请求的来源地址。在通常情况下,访问一个安全受限页面的请求必须来自于同一个网站。比如某银行的转账是通过用户访问http://bank.test/test?page=10&userID=101&money=10000页面完成,用户必须先登录bank.test,然后通过点击页面上的按钮来触发转账事件。当用户提交请求时,该转账请求的Referer值就会是转账按钮所在页面的URL(本例中,通常是以bank. test域名开头的地址)。而如果攻击者要对银行网站实施CSRF攻击,他只能在自己的网站构造请求,当用户通过攻击者的网站发送请求到银行时,该请求的Referer是指向攻击者的网站。因此,要防御CSRF攻击,银行网站只需要对于每一个转账请求验证其Referer值,如果是以bank. test开头的域名,则说明该请求是来自银行网站自己的请求,是合法的。如果Referer是其他网站的话,就有可能是CSRF攻击,则拒绝该请求。
3、在HTTP头中自定义属性并验证
自定义属性的方法也是使用token并进行验证,和前一种方法不同的是,这里并不是把token以参数的形式置于HTTP请求之中,而是把它放到HTTP头中自定义的属性里。通过XMLHttpRequest这个类,可以一次性给所有该类请求加上csrftoken这个HTTP头属性,并把token值放入其中。这样解决了前一种方法在请求中加入token的不便,同时,通过这个类请求的地址不会被记录到浏览器的地址栏,也不用担心token会通过Referer泄露到其他网站。
我们就是采用的这种方法,因为基本上所有的请求都是通过ajax,我们通过重新封装ajax,在ajax头部添加一个token,server去识别这个token,如果请求没有这个token或者错误就拒绝。
4、CSRF攻击是有条件的,当用户访问恶意链接时,认证的cookie仍然有效,所以当用户关闭页面时要及时清除认证cookie,对支持TAB模式(新标签打开网页)的浏览器尤为重要。
5、尽量少用或不要用request()类变量,获取参数指定request.form()还是request. querystring (),这样有利于阻止CSRF漏洞攻击,此方法只不能完全防御CSRF攻击,只是一定程度上增加了攻击的难度。
6、通过图形验证码
相对来说图形验证码应该是最安全的,但是我们不可能在所有的API上去加上这么个玩意儿,一般是在表单,比如注册,登录等,当用户频繁操作时出现,避免影响用户体验
所以建议以后ajax请求都尽量加上token验证,虽然不一定能防御所有的CSRF攻击,但是可以大幅度提升接口的安全性,中秋节加班通过紧急修复后,CSRF攻击基本没有了。

转载于:https://www.cnblogs.com/hutuzhu/p/5919400.html

关于CSRF跨域请求伪造的解决办法相关推荐

  1. CSRF跨域请求伪造

    CSRF跨域请求伪造 XSS漏洞的原理 (zhuyingda.com) CSRF漏洞的原理 (zhuyingda.com) 经了解,还是有很多系统没有针对该攻击做防御措施.即便如此,并不建议.推荐抑或 ...

  2. jango的CSRF跨站请求伪造即解决方法

    1.前戏 CSRF概念:CSRF跨站点请求伪造(Cross-Site Request Forgery),跟XSS攻击一样,存在巨大的危害性,你可以这样来理解:        攻击者盗用了你的身份,以你 ...

  3. 【安全牛学习笔记】CSRF跨站请求伪造攻击漏洞的原理及解决办法

    CSRF跨站请求伪造攻击漏洞的原理及解决办法 CSRF,夸张请求伪造漏洞 漏洞的原理及修复方法 1.常见的触发场景 2.漏洞原理:浏览器同源策略 3.DEMO 4.漏洞危害 5.如何避免&修复 ...

  4. 【安全牛学习笔记】CSRF跨站请求伪造***漏洞的原理及解决办法

    CSRF跨站请求伪造***漏洞的原理及解决办法 CSRF,夸张请求伪造漏洞 漏洞的原理及修复方法 1.常见的触发场景 2.漏洞原理:浏览器同源策略 3.DEMO 4.漏洞危害 5.如何避免&修 ...

  5. CSRF跨站请求伪造 | 总结记录

    CSRF跨站请求伪造 CSRF通常会配合XSS. 服务端错把浏览器发起的请求当成用户发起的请求,会造成XSS问题. 产生原因: 1.同上. 2.已登录的浏览器打开恶意网址后执行了相应操作. 一些概念 ...

  6. CSRF(跨站请求伪造)漏洞

    CSRF(Cross-site request forgery) 跨站请求伪造,由客户端发起,是一种劫持受信任用户向服务器发送非预期请求的攻击方式,与XSS相似,但比XSS更难防范,常与XSS一起配合 ...

  7. Web框架之Django_09 重要组件(Django中间件、csrf跨站请求伪造)

    摘要 Django中间件 csrf跨站请求伪造 一.Django中间件: 什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于 ...

  8. Django中如何防范CSRF跨站点请求伪造攻击

    CSRF概念 CSRF跨站点请求伪造(Cross-Site Request Forgery). 攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望 ...

  9. CSRF 跨站请求伪造攻击

    1.概念 全称是CSRF 跨站请求伪造攻击,攻击者利用用户已登陆的账号,诱导用户访问已构造好的恶意链接或页面,在用户不之情的情况下,做一些违反用户本意的一些违法操作. 同源策略:协议相同,域名相同,端 ...

最新文章

  1. Android Studio 3.5 之后导入第三方Library 库的方法
  2. C语言怎么保留n位小数并且四舍五入(附带两种简单方法)
  3. 怎样让你的安卓手机瞬间变Firefox os 畅玩firefox os 应用
  4. 20行代码AC_ 习题8-1 Bin Packing UVA - 1149(贪心+简单二分解析)
  5. Network下方什么请求也没有_HTTP的响应与请求
  6. 【离散数学中的数据结构与算法】二 欧几里得算法与裴蜀等式
  7. Java后端学习体系(韩顺平)
  8. 后台开发(1)---app后台开发入门
  9. Ubuntu中使用freeradius配置RADIUS,并在RADIUS中配置LDAP 并实现AP认证
  10. 思源黑体ttf_金刚黑体最粗版丨金刚黑体Bold+San Francisco
  11. 为android开发安装ubuntu系统环境纪要
  12. Android 使用数据库操作应用加锁、未加锁,列表展示效果
  13. 如何用ps把照片变成白底
  14. 世界经济论坛报告:全方位评估Fintech将如何颠覆金融业竞争格局,包括路径、模式和终局(二)...
  15. linux sysinfo函数使用方法--获取内存大小
  16. Android 更换应用图标无效
  17. 无人机三维建模(5) Photoscan建模
  18. 详解centos6和centos7防火墙的关闭
  19. C#项目实战——YModem协议文件传输【实例】
  20. 曾经的四大门户网站之一,新浪,这些年错过了三个重要的成长机会

热门文章

  1. PAOGD个人作业4——利用OpenGL设计贪吃蛇游戏
  2. 【Java网络编程与IO流】Http协议详解以及面试有关问题
  3. HTTP协议通信相关资料(做笔记)
  4. V891-Z3735F重做系统,驱动修复汇总
  5. AutoCAD2012从入门到精通中文视频教程 第15课 图案填充(个人收藏)
  6. 基于虚拟机对第三代蜜网技术Honeywall的设置
  7. 学考计算机使用说明,《大学计算机》上机考试系统操作指南
  8. CSS实现文字跑马灯效果
  9. Mapbox学习笔记(1)——style
  10. 676.实现一个魔法字典·前缀树