核心概念

缓存

web缓存位于用户和应用程序服务器之间,用于保存和提供某些响应的副本。在下图中,我们可以看到三个用户一个接一个地获取相同的资源:

缓存技术旨在通过减少延迟来提升页面加载速度,还可以减少应用程序服务器上的负载,同时达到防止Dos攻击的目的。

缓存键

缓存的概念可能听起来简单明了,但它隐藏了一些风险的假设。
每当缓存服务收到对资源的请求时,它需要确定:

  1. 是否已保存此指定资源的副本
  2. 是否可以使用该副本进行响应
  3. 是否需转发给应用程序服务器

确定两个请求是否正在尝试加载相同的资源可能是很棘手的问题;
对请求进行逐字节匹配的做法是完全无效的,因为HTTP请求充满了无关紧要的数据。
缓存使用缓存键的概念解决了这个问题 —— 使用一些特定的要素用于完全标识锁请求的资源。
缓存系统认为以下两个请求是等效的,并且很乐意将第一个请求缓存的响应来响应第二个请求:

GET /blog/post.php?mobile=1 HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 … Firefox/57.0
Cookie: language=pl;
Connection: close
GET /blog/post.php?mobile=1 HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 … Firefox/57.0
Cookie: language=en;
Connection: close

因此,该页面将以错误的语言输出提供给第二位访问者。
这揭示了一个问题:由非缓存键导致的差异化响应都能够被缓存并提供给其他用户。

缓存投毒

web缓存投毒的目的是发送导致有害响应的请求,将该响应保存在缓存服务中并提供给其他用户。

请注意,web缓存服务中还存在一种被称为 web缓存欺骗 的不同类型的攻击,不要和 缓存投毒 混淆了。

浏览器缓存投毒

浏览器一般缓存静态资源,那么攻击者的攻击目标也就是诸如JS、Css这类静态资源了。
比较容易发现的浏览器缓存投毒的表现是影响了页面的正常展示,但往往造成更大危害的可能属于不影响页面展示的缓存投毒,用于窃取一些用户信息等

服务器缓存投毒

服务器会缓存某个链接的第一个访问者的response内容。
如果第一个人是攻击者,就很有可能让CDN错误的缓存污染内容,达成攻击。

请看如下请求:

我们发现response页面中会拼接 X-Forwarded-Host,
那么假设我们是第一个请求者,此response将会被缓存,当下一个请求者访问时:

很明显,将会受到xss攻击。但是此类攻击有一个前提:
即攻击者需要是第一个请求页面的人,那么如何做到这一点?
攻击者可以利用response里的Age和max-age,以此计算投毒时机。

Age代表当前response时间,max-age代表该页面缓存何时过期

那么如何保护网站免受此类攻击呢?
这就要和我们之前提到的cache key有关了,如下:

如果我们利用Vary指定cache key为User-Agent,那么当两个访问者的请求域名、url、User-Agent都相同时,才命中同一块cache返回。

【前端安全】web缓存投毒相关推荐

  1. stm32 web get 参数_BlackHat2020议题之Web缓存投毒

    周末闲着没事就来学习下新的思路,文章很长,花了一天时间才码出来,所以,你懂我意思吧? 对了,周末打算出去走走,所以就不更文了 本文将会介绍Web缓存投毒的各种骚姿势以及利用链,并会搭配相应案例进行讲解 ...

  2. 研究员发现70个web缓存投毒漏洞,获奖4万美元

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 虽然web 缓存投毒漏洞为人熟知,但仍然会突然出现在网络.安全研究员 Iustin Ladunca (Youstin) 对很多网站展开大规模研究 ...

  3. BlackHat2020议题之Web缓存投毒

    周末闲着没事就来学习下新的思路吧 本文将会介绍Web缓存投毒的各种骚姿势以及利用链,并会搭配相应案例进行讲解,看完你一定会有收获的.Have Fun! Web缓存投毒基础 Web缓存大家应该都有所了解 ...

  4. 作为前端应当了解的Web缓存知识

    缓存优点 通常所说的Web缓存指的是可以自动保存常见http请求副本的http设备.对于前端开发者来说,浏览器充当了重要角色.除此外常见的还有各种各样的代理服务器也可以做缓存.当Web请求到达缓存时, ...

  5. web页面上数据是否进行缓存要怎么判断_前端要知道的网络知识五:详细的介绍web缓存...

    Web缓存是可以自动保存常见文档副本的HTTP设备.当Web请求抵达缓存时,如果本地有"已缓存的"副本,就可以从本地存储设备而不是原始服务器中提取这个文档.本文将详细介绍缓存的相关 ...

  6. 前端缓存【web缓存】

    前端缓存--http缓存 web缓存 http缓存 定义 优点 缺点 http缓存类型 强缓存 Expires实现的强缓存 Cache-control实现的强缓存 协商缓存 last-modified ...

  7. 技术点:前端缓存(web 缓存)详解

    前端缓存(web 缓存)详解 什么是 web 缓存 web 缓存主要指的是两部分:浏览器缓存和 http 缓存 浏览器缓存: localStorage,sessionStorage,cookie 等等 ...

  8. 基于反向代理的Web缓存应用-可缓存的CMS系统设计

    基于反向代理的Web缓存加速     --可缓存的CMS系统设计 作者: 车东 Email: chedongATbigfoot.com/chedongATchedong.com 写于:2003/05 ...

  9. Web缓存相关知识整理

    一.前言  工作上遇到一个这样的需求,一个H5页面在APP端,如果勾选已读状态,则下次打开该链接,会跳过此页面.用到了HTML5 的本地存储 API 中的 localStorage作为解决方案,回顾了 ...

  10. 12年前的 Linux bug 复活,DNS 缓存投毒攻击重现

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 清华大学和加州大学组成的研究团队发现一种可发动 DNS 缓存投毒攻击的新方法.这种方法重新激活了本以为已完全修复的2008年现身的一个 ...

最新文章

  1. 如何选择容器注册表?这里给出九个选项
  2. [SDOI2010]外星千足虫 题解 高斯消元+bitset简介
  3. mysql存储过程时间_mysql时间操作函数和存储过程
  4. 数的直径(两次DFS)
  5. 在县城投资买一辆出租车,一个月能收入多少钱?
  6. 什么是“ rpcsvchost”,以及为什么它在Mac上运行?
  7. javafx css颜色_JavaFX技巧7:使用CSS颜色常量/派生颜色
  8. 如何配置x225/x235/x335/x345的LSI SCSI卡实现RAID-1功能
  9. 电子科大计算机学院毕业照,电子科大毕业照拍摄指南,请内部传阅!
  10. 大油井隐藏的箱子_房子买的小户型,4招变大不止一倍
  11. 和我一起构建私有物联网云平台
  12. java dom xml解析和windows dom解析的差别
  13. mysql dsec_MySql数据库操作命令
  14. python图形化监控系统界面_手把手教你实现一个可视化爬虫监控系统,酷炫的图形化界面...
  15. 进程间通信之管道与有名管道
  16. iframe 父页面与子页面之间的方法、属性的相互调用
  17. 2008r2服务器频繁自动重启,关于Windows server2008频繁重启问题
  18. 免费开源BI工具DataEase实现了SQL数据集动态传参?冲冲冲!!!
  19. typedef的使用详解
  20. Infoq专访:Maven中文用户组创始人许晓斌

热门文章

  1. PS调色技巧及HSB调色原理
  2. 青岛飞阳计算机学校,青岛通济实验学校:综艺比赛 青春飞扬
  3. 从4千/平到4.5万/平!南京房价10年血泪史 看哭所有人!
  4. CSS实现背景图片固定
  5. Chrome浏览器取证分析
  6. vue中使用v-if出现闪现然后消失
  7. 戏谈编程:那些程序员的级别陷阱,你遇到过吗
  8. 注塑缺陷浮纤的原因及解决对策
  9. ubuntu 14.04加入五笔输入法
  10. 银行从业中级系列课程之——银行管理(二)监管概述,监管指标和监测指标