如何机智的弄坏一台电脑?

全世界只有3.14 % 的人关注了

爆炸吧知识


原文:http://litten.me/2015/07/06/hack-in-localstorage/

作者:Litten

很多人都在说:“技术领域当中,前端最没有技术含量,且容易被替代。”有人说,前端的能力界限顶多就在浏览器那儿,无论你触发了多少bug,最多导致浏览器崩溃,连电脑系统都影响不了。

就像二次元各种炫酷的毁灭世界,都不会导致三次元的世界末日。

这我就不能忍了。作为一个前端,我发现还是有方式突破次元壁、打开次元大门的…

这个实验脑洞较大,动机无聊,但某种意义上反映了一些安全问题。

想象一下,有天你在家里上网,吃着火锅还唱着歌,点开一个链接,电脑突然就蓝屏了!想想还真有点小激动。

起因

故事得从localStorage(本地存储)说起。

html5的本地存储,相信大家都不陌生。将数据以二进制文件形式存储到本地,在当前应用得非常广泛。

windows下的chrome,localStorage存储于C:\Users\xxx\AppData\Local\Google\Chrome\User Data\Default\Local Storage文件夹中。但如果任由网页无限写文件,对用户硬盘的伤害可想而知,因而浏览器对其做了大小限制。

对于一个域名+端口,PC端的上限是5M-10M之间,移动端的则是不大于2.5M。

那么问题就变成:这样的限制足够保护用户硬盘了吗?

关键

关键的问题在于,这一限制,针对的是一个域名+端口。

也就是说,你访问同一个域名的不同端口,它们的localStorage并无关联,是分开存储的。

我用node简单地开启了服务器,这时,用户访问http://127.0.0.1:1000到http://127.0.0.1:1099这100个端口,会请求到同一个页面index.html。


当然,这个index.html里涉及了localStorage写操作。


我试着用浏览器分别访问了几个端口,结果是分开存储。一切跟剧本一样。

自动遍历

但这种程度还不够。

如果要让实验变得更好(xie)玩(e)一些,问题就变成如何让用户自动遍历这些端口?

iframe是个好的尝试。

只要一打开http://127.0.0.1: 1000,页面的脚本就会创建一个iframe,去请求http://127.0.0.1: 1001,一直循环下去。

当然iframe我们还可以设置为不可见,以掩盖这种不厚道的行为…

比方说,有人发给你一个链接,你打开后发现是个视频,而你根本注意不到背后的脚本,在视频播放的几分钟里,快要把你的C盘写满。

然后我就看到请求如潮水渐涨:

但是,请求到1081端口,最新的chrome就崩溃掉了…原来iframe嵌套太多,已经到达了浏览器的极限。

防止浏览器崩溃

C盘还未撑满,同志还需努力。怎么办?

突然想到,到达iframe极限之前,我们可以重定向啊。

每访问50个端口,就使用window.location.href重定向一次,去确保浏览器不崩溃。

事实证明,这种野蛮的方法的确可行。

至此,只要访问http://127.0.0.1: 1000,就会往Local Storage文件夹里写入近500M无用数据:

里面的数据是这样的:


继续实验的黑科技

算了下我的C盘还有空间嘛,那就把端口数量从100增长到200个。结果是这样的,到达了1.17G大小。


在后续的实验中,我就慢慢地把端口数量与存储的数据调大。

电脑也运行得越来越慢。这是为什么呢?

我观察到,有时候执行localStorage.setItem()后,在文件夹里不一定立即能看到数据文件。我怀疑这些数据会被chrome先放到内存里,以避免重复读写带来的消耗,在空闲或关闭的时机,再写进硬盘里。

但此时,浏览器已经影响到系统了。它处于一种“不会崩溃”,但“因为占用了许多内存,已经妨碍用户电脑的正常使用”的状态。

即使用户关闭了浏览器窗口,也不会很快恢复。要知道读写任务并不是随窗口关闭而终止的,否则浏览器会丢失数据。

遭遇黑科技的人们能做的只有:

  • 等待;

  • 用任务管理器关掉chrome进程,再等待;

  • 相信并尝试“重启电脑解决90%电脑问题”的科学论断。

可以说,浏览器的内心几乎是崩溃的。

最后

最后,还是得用严肃脸告诫一下:害人之心不可有。

本实验,从一开始就是怀揣着将安全问题上交给国家的初衷去做的(是的就是这么纯粹)。

后续,看着C盘还有2G空间,我又把端口增长到2000个,试下会发生什么。

由于请求过多,需要一定时间,我就去做别的事情了。

回来后发现房间安静祥和,美轮美奂,一片蓝光,像是加了特技。

那么…

问题来了,计算机修理哪家强?

有点急…

从工作流程来看,前端开发工程师处于UI设计师的下游,要接UI设计稿,转化为网页。同时又是后端工程师的上游,需要把用户产生的数据提交到服务端。横向来看,他又与产品经理有着密切接触,因为他可能随时和产品经理探(si)讨(bi)交互的细节。

对于产品经理天马行空的思想,你要能把握到位,你得理解他比划了半天到底是想要做什么。与后端工程师打交道的时候,你又得马上化身编程达人,跟他们聊数据类型,聊面向对象,聊设计模式。

前端的门槛好像很低,但要成为一名专业的前端工程师,需要掌握的东西太多了。除了前端技术外,还要思维细腻、有品味、有思想、情商高等等。毕竟你要通过代码与用户产生接触,给用户带来愉悦感。

从某种程度上来说,好的前端工程师,一定得先是一个好人。

本文转载自【51CTO官微】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298140.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

局域网屏幕监控软件

选择一款好的局域网屏幕监控软件要注意哪些问题?相信这是很多企业老板、网管都关心的问题之一。网上各种监控软件那么多,万一下载一个不好用的软件,不仅浪费的是时间,甚至因为软件稳定性不好,影响员工工作效率就不好了…

android 学习查阅笔记

给自己一个链接地址方便找http://www.cnblogs.com/TerryBlog/archive/2010/06/25/1764821.htmlAndroid与IIS身份验证——基本验证http://www.cnblogs.com/GoodHelper/archive/2011/08/17/android_iis_01.html转载于:https://www.cnblogs.com/yjrl/archive/2011/08/14/2137692.h…

pythonlive2d_Unity-Live2D资源载入

在Live2d上下载的资源模型是.cmox格式的,无法直接在unity内使用,需要在Cubism中导出成.moc文件。1.将下载的.cmox资源直接拖入Cubism2.导出的时候有2.0版本和3.0版本的,如图随便哪个版本都OK,这里2.0和3.0的区别是,3.0…

C#为什么会这么慢之命运之终章-真理篇for firelong

firelong我真得希望你来看一看,可惜上一篇你错过了。c#会这么慢的话题却是始终充满着火药味,也许说真话真的很不动听, 可能上次的帖子firelong没看到,讨论C#哪能错过微软,.NET战略是微软当年的号称终极兵器的究级必杀技…

mysql 备份 master_如何配置MYSQL的MASTER---SLAVE复制备份?

一、配置一个mysql服务器做master:在配置文件my.ini中添加如下内容:log-binmatster-binlog-bin-indexmatster-bin.indexserver-id1master必须有一个活动的二进制日志和唯一的server-id,然后重启mysql服务器。其次,以root登录,创建…

豆瓣评分9分+,这6部经典趣味数学纪录片堪称神作!

全世界只有3.14 % 的人关注了爆炸吧知识数学是研究数量、结构、变化以及空间模型等概念的一门学科。透过抽象化和逻辑推理的使用,由计数、计算、量度和对物体形状及运动的观察中产生。数学家们拓展这些概念,为了公式化新的猜想以及从合适选定的公理及定义…

C++游戏开发需要阅读的书籍

如果要自学游戏程序开发的话,可以看看下面的,呵呵。 游戏开发资料(PDF书都是中文版的,非英文,很多是本人自己扫描制作,从未网上发布过,所以独家啦): 1、Gamebryo 2.2游…

32位hex转浮点 python_python——int()、hex()、oct()、bin()、float()数值类型转换函数

摘要:在python中,数值类型转换函数常用的有浮点型float()、取整int()、八进制oct()、二进制bin()、十六进制hex()这五个函数。单词float的意思就是浮动的意思;int是单词integer整数的前三个字母;oct是单词八进制octal的前三个字母…

C语言运算符优先级 详细列表

优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 () 圆括号 (表达式)/函数名(形参表) . 成员选择(对象) 对象.成员名 -> 成员选择(指针) …

我的闪存

快速记录平时需要保存的知识点。博客园的闪存,能输入的内容不丰富,比如不能贴代码。

随机加解密java_JAVA随机数生成 Math.random和java.util.Random使用简介

一、Math.random1Math.random内部使用java.util.Random实现2 直接调用Math.random是产生一个[0,1)之间的随机数public static void testMathRandom() {System.out.println(Math.random());System.out.println(Math.random());}输出:0.97584820103710910.…

找对象不能只看TA的外表

1 别人家的小奶猫简直太萌了!2 你为什么抱它不抱我-我不高兴!3 这设计怎么讲4 垃圾桶是新的穿越道具!5 找对象不能只看TA的外表6 一下都不知道要干嘛了7 在评论区大声告诉我你点的每个赞,我都认真当成了喜欢

locate: database too small: /var/db/locate.databas

问题:在freebsd下运行出现错误: locate: database too small: /var/db/locate.databas 解决:#/usr/libexec/locate.updatedb转载于:https://blog.51cto.com/ahwind/341486

一文说通异步 LINQ

用不好异步 LINQ,基本上就等于用不好 LINQ 了。LINQ 这个东西,出来很早了,写过几年代码的兄弟们,或多或少都用过一些。早期的 LINQ,主要是同步的,直到 C# 8.0 加入 IAsyncEnumerable,LINQ 才真正…

HDU_1541 Stars(树状数组)

poj上1A&#xff0c; HDU上6A&#xff0c;我晕啊&#xff01;注意几点&#xff1a; 1、多组数据&#xff1b; 2、memset(c, 0, siezeof(c)); 3、memset(ans, 0, sizeof(ans)); my code: View Code #include <stdio.h>#include <string.h>#define N 32010int c[N],…

点击ride界面edit空白_『技术锦囊』如何在SOLIDWORKS界面调用宏程序?

SOLIDWORKS宏程序为广大设计开发者提供了非常便捷的开发环境&#xff0c;合理的使用宏程序除了可以节约时间还可以减少很多不必要的操作&#xff0c;例如一键替换图纸等。此次便与大家讲讲&#xff0c;如何在SOLIDWORKS界面调用宏程序。操作流程1、任意开启一张工程图图纸&…

摇滚java游戏_java 集合类

一、Array &#xff0c; ArraysJava所有“存储及随机访问一连串对象”的做法&#xff0c;array是最有效率的一种。1、效率高&#xff0c;但容量固定且无法动态改变。array还有一个缺点是&#xff0c;无法判断其中实际存有多少元素&#xff0c;length只是告诉我们array的容量。2…

女人在想什么

1 行吧&#xff0c;这样至少回家不用给洗jiojio了。2 世纪难题——《女人在想什么》3 方法总比困难多4 跟瓜摊大哥学切西瓜5 你是怎样上去的&#xff1f;6 摄影师&#xff1a;我是因为没有对手才做摄影的&#xff01;7 有了女儿后&#xff0c;儿子的处境好像不太妙8 想知道白色…

linux打包压缩命令汇总

tar命令 [rootlinux ~]# tar [-cxtzjvfpPN] 文件与目录 ....参数&#xff1a;-c &#xff1a;建立一个压缩文件的参数指令(create 的意思)&#xff1b;-x &#xff1a;解开一个压缩文件的参数指令&#xff01;-t &#xff1a;查看 tarfile 里面的文件&#xff01;特别注意&…

zoj2271 Chance to Encounter a Girl(DP)

/* 概率计算&#xff1a;按时间为阶段&#xff0c;每个点由上一阶段周围的四个点来维护。 注意事项&#xff1a;1.时间O&#xff08;N^3*T&#xff09;&#xff0c;在问题的边缘时间&#xff0c;所以打表计算。     2.关于概率的求解&#xff0c;如果遇到就结束了&#…