1、什么叫做CSRF攻击

简单地说,就是说恶意网站,虽然没有盗取你的用户名和密码信息,但是却可以伪装成你,然后登录到银行,或者等危险网站,模拟你进行操作。利用的就是cookies这个特性,即浏览器提供的这种简易的自动身份认证功能。

2、解决的办法

检查Referer字段
HTTP头中有一个Referer字段,这个字段用以标明请求来源于哪个地址。在处理敏感数据请求时,通常来说,Referer字段应和请求的地址位于同一域名下。以上文银行操作为例,Referer字段地址通常应该是转账按钮所在的网页地址,应该也位于www.examplebank.com之下。而如果是CSRF攻击传来的请求,Referer字段会是包含恶意网址的地址,不会位于www.examplebank.com之下,这时候服务器就能识别出恶意的访问。

这种办法简单易行,工作量低,仅需要在关键访问处增加一步校验。但这种办法也有其局限性,因其完全依赖浏览器发送正确的Referer字段。虽然http协议对此字段的内容有明确的规定,但并无法保证来访的浏览器的具体实现,亦无法保证浏览器没有安全漏洞影响到此字段。并且也存在攻击者攻击某些浏览器,篡改其Referer字段的可能。

添加校验token
由于CSRF的本质在于攻击者欺骗用户去访问自己设置的地址,所以如果要求在访问敏感数据请求时,要求用户浏览器提供不保存在cookie中,并且攻击者无法伪造的数据作为校验,那么攻击者就无法再运行CSRF攻击。这种数据通常是窗体中的一个数据项。服务器将其生成并附加在窗体中,其内容是一个伪随机数。当客户端通过窗体提交请求时,这个伪随机数也一并提交上去以供校验。正常的访问时,客户端浏览器能够正确得到并传回这个伪随机数,而通过CSRF传来的欺骗性攻击中,攻击者无从事先得知这个伪随机数的值,服务端就会因为校验token的值为空或者错误,拒绝这个可疑请求。

说明:

CSRF攻击的根源在于浏览器默认的身份验证机制(自动携带当前网站的Cookie信息),这种机制虽然可以保证请求是来自用户的某个浏览器,但是无法确保这请求是用户授权发送。攻击者和用户发送的请求一模一样,这意味着我们没有办法去直接拒绝这里的某一个请求。如果能在合法请求中额外携带一个攻击者无法获取的参数,就可以成功区分出两种不同的请求,进而直接拒绝掉恶意请求。在SpringSecurity中就提供了这种机制来防御CSRF攻击,这种机制我们称之为令牌同步模式。

客户访问的方式如下:

A 现在登录某银行的网站准备完成一项转账操作,转账的连接如下:

https: //bank .xxx .com/withdraw?account=blr&amount=1000&for=zhangsan

可以看到,这个连接是想从 这个账户下转账 1000 元到 zhangsan 账户下,假设 A没有注销登录该银行的网站,就在同一个浏览器新的选项卡中打开一个危险网站,这个危险网站中有一副图片,代码如下:

<img src=“https: //bank .xxx .com/withdraw?account=blr&amount=1000&for=lisi” />

一旦用户打开了这个网站,这个图片链接中的请求就会自动发送出去。由于是同一个浏览器并且用户尚未注销登录,所以该请求会自动携带上对应的有效的 Cookie 信息,进而成功完成一次转账操作。这就是跨站请求伪造。

这也就是所谓的跨站伪造请求。就是说这个请求是其他网站伪造的。那么能够携带的写信也就只有cookies了。

所以,令牌同步模式的解决思路如下:

对于前后端分离的系统而言,客户端输入用户名和密码以后,服务端除了要返回成功以外,还需要返回token,然后这个token会存储在cookie当中,同时,服务端也会保存一份。这样客户端再次发送请求时,需要带着这个token访问,服务端会对比客户端此时传送过来的token是不是我的token。那么这个过程,就是由前端浏览器在没有关闭页面时,前端项目存储的,然后二次请求会自己添加到请求当中。

而对于恶意网站这种跨域转发的请求,通常都是一个post的操作,而这个操作的过程,是没有事前获取post界面时就要的token的,所以直接的post请求在后端就是会被拒绝的。

传统web应用的处理思路如下:

对于传统的web应用,为了防止CSRF,那么首先要去获取这个post的页面,在获取的过程中,服务端会生成token,并通过隐藏字段的方式提供给前端。然后前端再次提交这个真的post请求过去,就自动在页面当中携带了token。而跨域为请求,是直接发送post请求,因此只是带有用户名和密码,是没有token信息的。也就是说,如果是,第三方网站跳转过去,就是直接操作的界面,就算是有了cookie,认证通过了,但是因为没有这个请求字段,所以操作是无法成功的。也就是第三方的跳转,是没有人给他插入这个隐藏字段的。

这个过程,有一个非常好的类比,就是,这个过程,就是验证码的过程。

安全认证中的CSRF相关推荐

  1. Django框架(26.Django中的CSRF以及登录装饰器)

    CSRF简介 CSRF全拼为Cross Site Request Forgery,译为跨站请求伪造.CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求.CSRF能够做的事情包括:以你名义发送邮件, ...

  2. web csrf java_在Java Web应用程序中阻止CSRF

    web csrf java 跨站点请求伪造攻击(CSRF)在Web应用程序中非常常见,如果允许,可能会造成重大危害. 如果您从未听说过CSRF,建议您查看有关它的OWASP页面 . 幸运的是,阻止CS ...

  3. Spring MVC,Thymeleaf,Spring Security应用程序中的CSRF保护

    跨站点请求伪造(CSRF)是一种攻击,它迫使最终用户在当前已通过身份验证的Web应用程序上执行不需要的操作. 如果您使用Spring Security 3.2及更高版本,在Spring MVC / T ...

  4. 在Java Web应用程序中阻止CSRF

    跨站点请求伪造攻击(CSRF)在Web应用程序中非常常见,如果允许,可能会造成重大危害. 如果您从未听说过CSRF,建议您查看有关它的OWASP页面 . 幸运的是,阻止CSRF攻击非常简单,我将向您展 ...

  5. Adobe国际认证中文官网

    Adobe国际认证中文官网是Adobe公司为了帮助用户提高技能水平和职业竞争力而推出的认证服务.该官网提供了一系列的Adobe认证考试,包括Photoshop.Illustrator.InDesign ...

  6. 【Adobe国际认证中文官网】Adobe中国摄影计划,免费安装 正版激活

    一直以来国内有非常多的 Adobe 用户,但苦于正版的购买渠道较少.价格较为高昂,转而选择其他国家或地区的 Adobe 计划,亦或者是其他软件.这次Adobe在杭州宣布在中国大陆地区推出面向专业摄影师 ...

  7. 蓝牙协议栈测试,蓝牙协议栈认证:蓝牙BQB认证中End Product/Subsystem和Component的认证区别

    Part.1 蓝牙BQB认证类型的选择是认证过程中必须要做的事情,以下些信息有助于理解如何来选择蓝牙BQB认证类型: (1)若贵公司认证的蓝牙设计将会被其他会员公司使用到其产品中,蓝牙BQB认证资格认 ...

  8. 什么是蓝牙的核心协议层和产品类型?一文读懂BQB认证中两者的关联

    蓝牙核心协议层 什么是蓝牙核心协议层? 所有蓝牙产品必须拥有相应资格才可以进行出售或分发.而蓝牙技术是需通过软件和硬件的 组合实现,分为蓝牙HOST主机(软件)和CONTROLLER控制器(硬件). ...

  9. 欧盟ce认证中无线产品RED指令是什么?

    欧盟ce认证中无线产品RED指令是什么? 欧盟无线电RED指令简介 2014年,欧盟发不了新的无线电CE认证-RED指令2014/53/EU,于2016年6月开始执行,并于2017年起强制执行,取代了 ...

最新文章

  1. 斯坦福连续发了四年的 AI 报告,今年讲了什么?
  2. Entity Framework的事务提交
  3. php libmysqlclient,什么是php?以及mysqlnd与libmysqlclient
  4. “隐忍”多年的“水果大王”百果园要寻求资本协助了?
  5. 查看表扫描次数,并对比索引对表查询的作用
  6. 解决由于没有办理权限导致的403,权限不足
  7. HTML div元素
  8. 花了10块钱,我在朋友圈成为了富豪...
  9. AndroidStudio安卓原生开发_启动系统的activity_短信发送activity_摄像头activity_电话拨打activity---Android原生开发工作笔记94
  10. SqlServer数据库字典
  11. left和offsetLeft
  12. Java快捷键标识符入门学习
  13. Ubuntu18.04 Deb 包安装方法
  14. 【Linux学习笔记04】Linux常用命令
  15. 搞副业被领导发现了,让我要么停止,要么滚蛋!
  16. Flutter访问webservice
  17. Python机器学习英文资源
  18. java 复制excel_Java 复制Excel工作表
  19. RAS - Reliability, Availability and Serviceability
  20. 解决报错 WARNING: IPv4 forwarding is disabled. Networking will not work.

热门文章

  1. 创业团队,撕撕更健康
  2. Linux创建4个线程P1 P2,HYZ-OS-2017-2-进程管理-4.ppt
  3. unbound prefix
  4. codeforces 60C Mushroom Strife ——DFS
  5. 45个网页中充满创意的字体排版
  6. Mastering ROS for Robotics Programming第二版阅读笔记
  7. 前端 | ( 十一)CSS3简介及基本语法(上) | 尚硅谷前端html+css零基础教程2023最新
  8. 报错:CommandNotFoundError: Your shell has not been properly configured to use ‘conda activate‘. 问题解决
  9. 哈希的应用 -- 布隆过滤器
  10. OpenOffice在线预览附件