写点什么

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

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

关注

评论

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

阿里开发7年大牛:Android事件分发机制及设计思路,分享PDF高清版

欢喜学安卓

android 程序员 面试 移动开发

架构师训练营第七周作业 - 学习总结

阿德儿

架构师训练营第七周作业 - 命题作业

阿德儿

管理笔记【10】十二条给管理者的人事管理经验

L3C老司机

28天写作

一种C++中支持界面调用函数的实现方法

长不胖的Garfield

甲方日常 92

句子

工作 随笔杂谈 日常

浅谈EMC电磁兼容设计—概念篇

不脱发的程序猿

28天写作 二月春节不断更 电路设计 EMC 电磁兼容

第十三周课后练习

Binary

Eureka 部分机制记录

常清静

Spring Cloud 原理 Eureka

【vue2 & G6】快速上手

德育处主任

大前端 可视化 数据可视化 G6 antv/g6

android开发需要学什么!最全面试考点与面试技巧,已拿offer附真题解析

欢喜学安卓

android 程序员 面试 移动开发

私有云、公共云、混合云安全性的优点和缺点

云计算

测试InfoQ 平台发布文章

木子的昼夜

28天瞎写的第二百四十天:我与正念的故事

树上

冥想 28天写作 正念 焦虑 平静

笑说设计模式-小白逃课被点名

happlyfox

28天写作

Kafka.04 - Kafka 部署

insight

kafka 2月春节不断更

创业公司如何搭建自己的领导班子

一笑

28天写作

(28DW-S8-Day2) 在线教育的本质

mtfelix

28天写作 在线教育的本质特点

刚学会 C++ 的小白用这个开源框架,做个 RPC 服务要多久?

HelloGitHub

c++ GitHub 开源 RPC

Koa中间件体系的重构经验

智联大前端

node.js 大前端 单元测试 重构 koa

详解SSH 框架中对象调用流程

华为云开发者联盟

spring hibernate struts SSH 框架

十二周作业&总结

胡益

SICP 习题解答 1.6

十元

魂牵梦绕——俄罗斯方块效应

Justin

心理学 28天写作 游戏设计

基于证券云服务的总体架构设计应该怎么做?

Jason Tien

关于星座的趣谈「Day 2」

道伟

28天写作

第五周作业-线下核销优惠券流程图

隋泽

产品经理训练营

如何检测社交网络中两个人是否是朋友关系(union-find算法)

Silently9527

程序员 算法和数据结构 union-find

1.1 Go语言从入门到精通:开发环境搭建

xcbeyond

vscode 环境安装 28天写作 Go 语言

工作日志2-20

技术骨干

第13周学习总结

Binary

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