大模型“四虎”出山,亮相 4 月 QCon 北京。 了解详情
写点什么

国外网友另类方式曝主流浏览器 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:554030
用户头像

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

关注

评论

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

anyRTC语音开黑demo正式上线

anyRTC开发者

音视频 WebRTC 直播 RTC

数字货币交易所源码开发,区块链交易系统搭建服务商

13530558032

【获奖名单公布】程序员摇身一变摄影师,属于技术人的摄影展示大赛

InfoQ写作社区官方

写作平台 征稿 热门活动

flutter之踩坑的日子(2)

霜蓝手环

小程序flutter, 跨平台 Flutter Android Apk

再深入一点|binlog和relay-log到底长啥样?

艾小仙

Java MySQL 数据库 架构设计

MySQL数据库技术与应用:数据查询

华为云开发者联盟

MySQL 数据库 存储

Linux基金会唯一官方微服务培训课程免费学 | 快速构建稳定可靠的微服务应用

TARS基金会

开源 微服务 培训 Linux基金会 TARS

我是如何从0到1完成一个简单的中间件(1)

sinsy

Java 中间件

第六周作业

Vincent

极客时间 极客大学

anyRTC RTSP转WebRTC方案

anyRTC开发者

音视频 WebRTC 直播 RTC 安卓

最新:央行副行长详解数字人民币,信息量巨大!

CECBC

人民币 数字人民币

切片真的是引用类型嘛

Gopher指北

Go 语言

Golang领域模型-资源库

奔奔奔跑

微服务 领域驱动设计 DDD Go 语言

对比 Redis 中 RDB 和 AOF 持久化

超超不会飞

别闹,我用1个BTC居然买不了一个爱马仕包

猫Buboo

区块链+

111

不在调上

oeasy 教您玩转 linux 010215 随机谚语 fortune

o

Spring 5 中文解析数据存储篇-Spring框架的事物支持模型的优势

青年IT男

Spring5 数据存储

追光逐影:焦距与镜头语言

北风

创作 生活 摄影 光影 摄影征文

随想之UI+API

云杉

关于数据存储引擎结构,没有比这篇更详细的

华为云开发者联盟

数据库 nosql 存储

这是一个奇怪的因果关系

陈磊@Criss

摄影

分库分表中间件的高可用实践

无毁的湖光

MySQL TCP 高可用 分库分表 高性能

数字资产会成为人类最大的资产

CECBC

数字资产 数字化时代 孙正义

“度拉拉”升职记:中国语音助手的成长史

脑极体

java安全编码指南之:字符串和编码

程序那些事

安全编码指南 java安全编码 java安全编码指南

第六周学习总结

Vincent

极客时间 极客大学

iPad Air把它大哥iPad Pro按在地上摩擦

徐说科技

互联网只改变了商业的一部分,区块链将从根本上重构商业

CECBC

区块链 去中心化 互联网金融

血的教训!千万别在生产使用这些 redis 指令

楼下小黑哥

Java redis 生产事故

查找数组中最大值的5种方法!(动图演示)

王磊

Java 面试

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