核心概念

缓存

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. in python_数学 in python
  2. boost::container模块实现虚拟测试分配器的程序
  3. pythontcp文件传输_python socket实现文件传输(防粘包)
  4. POJ3278(BFS入门)
  5. mysql 学习笔记 多表查询02
  6. 第一百三十九期:11月数据库排行:排名前三数据库分数暴跌
  7. 算法 - 快速幂算法
  8. java cache教程_Java 中常用缓存Cache机制的实现
  9. memcached客户端_Memcached Java客户端示例
  10. linux查看有哪些用户连接到本机
  11. win7计算机地址栏在那,win7系统如何使用地址栏功能|win7系统使用地址栏的方法...
  12. Quartz时间配置(周期任务类)
  13. 关于swf转fla 软件的间题
  14. 使用Java实现一元二次方程求根计算器
  15. Win10最新批量激活
  16. excel数据分析 - 13个图表可视化技巧
  17. MT6573添加新硬件模块驱动方法
  18. Excel教程(8) - 财务函数
  19. java阿里天气接口_天气预报接口
  20. 小米2A com.android.phone,104.android 简单的检查小米手机系统和华为手机系统是否打开通话自动录音功能,跳转通话录音页面...

热门文章

  1. IOS开发学习资料集合(开发必备)
  2. file api java_File的API和常用方法详解_动力节点Java学院整理
  3. 字符型变量ch的值为英文字母 的c语言表达式
  4. ae合成设置快捷键_【实用向】AE必备小技巧
  5. 大树体验云受邀参加CMO价值营销峰会 助力品牌新增长
  6. 疫情期间谁干谁赚钱的三个小副业,普通人也能干,基本不用你投资
  7. 计算高德经纬度坐标点之间的距离
  8. java动漫项目_狂拽酷炫diao炸天的开源动画项目:lottie-android,拿来就用!
  9. Android技术知识点:如何添加字体资源
  10. 按右手定则求已经知三点的法向量