写点什么

国外网友另类方式曝主流浏览器 HTML5 bug:localStorage 可占满硬盘

  • 2013-02-28
  • 本文字数:1050 字

    阅读完需:约 3 分钟

HTML5 Web 存储标准是设计为让站点可以存储比 Cookie(4KB)大的多的数据(比如 5-10MB)来制定的。现在,localStorage 已经发展的非常不错,在所有现代浏览器中都得到了支持(Chrome, Firefox 3.5+, Safari 4+, IE 8+,等等)。

然而,纵使 Chrome 的版本号已经逼近 30,IE 也已然发布了他的第十代产品,这个标准却仍未完美。国外网友 Feross Aboukhadijeh 在他的个人博客上,发布了一个搞怪的 API—— HTML5 Hard Disk Filler™。通过这个 API,他想告诉大家,其实这项功能在主流浏览器中还有着非常明显的问题。

W3C 标准早就预料到,可能会有网站可能会滥 Web 存储特性。在标准里,W3C 建议浏览器为每个域设置一个存储空间上限。所以,实际情况是这个样子的:

  • Chrome 中的每个域可以使用 2.5 MB
  • Mozilla Firefox 和 Opera 中的每个域可以使用 5 MB
  • Internet Explorer 中的每个域可以使用 10 MB

但是,如果站长们比较聪明,使用了很多诸如 1.filldisk.com、2.filldisk.com、3.filldisk.com 这样的子域名会怎么样?每个子域名都会有 5MB 的存储空间吗?W3C 标准表示这是不可以的:

User agents 应该阻止站点通过附属网站的形式来存储数据,比如通过使用 a1.example.com、a2.example.com、a3.example.com 这样的子域名来绕过主域名的存储限制。

通常来讲,我们建议给予一个强制的 5MB 存储限制。

然而,Chrome、Safari,和 IE 目前还没有实现这些诸如对“附属站点”进行存储限制的功能。所以,那些聪明的网站,比如 FillDisk.com,实际上可以通过这个方式,在每个访问用户的电脑上获得几乎无限的存储空间。

一个概念证明的 demo

原文作者提供了一个漂亮的 demo: FillDisk.com 来作为证明此概念的 demo。并且他还将这个 demo 开源在了 GitHub 上。

这个 demo 的特性有:

  • 充满 Chrome、Safari(iOS 与桌面版本)和 IE 用户的硬盘;
  • 在装配有 SSD 的 Macbook Pro Retina 上,占领 1GB 只需要 16 秒;
  • Chrome25、Safari6、IE10 测试通过;
  • 在像 Chrome 这样的 32-bit 的浏览器下,硬盘充满之前浏览器就会先被搞崩溃;
  • Firefox 测试失败,因为 Firefox 完美实现了 localStorage 的标准;
  • 还提供了一个清除磁盘占用空间的按钮。

各位不妨一试。

如何修正这个 Bug?

作者在天才般的搞怪结束之后,变得正经起来,给出了 Google 和 Apple 的 bug report 链接:

但是他也表示,IE 怎么办呢?因为 IE 的 bug report 页面坏掉了。

原文中有很多有趣的浏览,感兴趣的读者可以移步至英文原文。当然,也欢迎大家对此 Bug 以及这位国外友人的曝 Bug 方式在此留言讨论。

2013-02-28 07:554351
用户头像

发布了 91 篇内容, 共 40.9 次阅读, 收获喜欢 3 次。

关注

评论

发布
暂无评论
发现更多内容

完美的,从不空口说白话,140个案例带你深入理解微服务

Java架构师迁哥

JVM-技术专题-MAT解析OOM问题

码界西柚

JVM

树莓派安装pytorch

IT蜗壳-Tango

4月日更

区块链商品防伪溯源平台搭建,实现数据信息安全共享

13828808769

区块链 商品溯源 #区块链#

区块链电子证照平台搭建,助推政务数字化发展

13828808769

电子存证 区块链+ #区块链#

计算机原理学习笔记 Day4

穿过生命散发芬芳

计算机原理 4月日更

什么是跨职能合作的关键?

王辉

团队管理 技术管理 沟通

Python OpenCV 图像处理之图像直方图,取经之旅第 25 天

梦想橡皮擦

Python OpenCV 4月日更

Python模拟MOBA手游(三)

Bob

Python Python 游戏编程 4月日更

升级JDK到1.8笔记

风翱

jdk8 4月日更

InheritableThreadLocal源码解析,子线程如何获取父线程的本地变量?

徐同学呀

ThreadLocal Java源码

升级版数字人民币试点在深启动 这次有啥不一样?

CECBC

数字人民币

微服务中台技术解析之项目环境隔离

小江

kafka 架构 DevOps 后端

智慧公安情指勤系统搭建,指挥调度平台解决方

13828808769

智慧公安

《分布式系统设计》(1) 从程序思维到系统思维

陈皓07

Coinbase上市在即,这里有你想知道的一切

CECBC

比特币

Spark的动态资源分配

小舰

Spark调优 4月日更

读scss/sass实例项目带你入门

devpoint

SASS scss css预处理器

余额宝|三年开发|一二三四+HR面面经,已拿offer|

Java架构师迁哥

三分钟热度的你,不会得到你想要的结果

小天同学

坚持 日常感悟 4月日更 专心 个人思考

无脑用 react 的 useCallback

sadhu

React Hooks 无脑 useCallback

Java流(Stream)操作实例-筛选、映射、查找匹配

Java小咖秀

Java stream java8 日常开发

爽面数码打底浆说明书

C13713145387

爽面数码打底浆 哑面数码打底浆 数码打底浆

「MySQL」深入理解事务的来龙去脉

学Java关注我

Java 编程 架构 程序人生 软件架构

《分布式系统设计》(2) 关键概念和基本问题

陈皓07

Linux 下的Zabbix Agent 安装

耳东@Erdong

Linux zabbix 4月日更

真假敏捷教练

escray

面试 面经 4月日更

Spring 类型转换

邱学喆

Converter spring类型转换 GenericConversionService GenericConverter ResolvableType

Rust从0到1-枚举-定义

rust 枚举 Option

神秘又强大的@SpringBootApplication注解

vivo互联网技术

Java 后端 springboot 注解分析

透气胶浆、无手感透气胶浆

C13713145387

透气胶浆 仿拔印浆 无手感透气浆

国外网友另类方式曝主流浏览器HTML5 bug:localStorage可占满硬盘_JavaScript_彭超_InfoQ精选文章