12行代码的浏览器DoS攻击分析及防御

有一段12行的JavaScript代码,可以让firefox、chrome、safari浏览器崩溃,而且还能让iphone重启、安卓闪退,本文作者对于该12行代码进行了分析解读并且提出了相应的防御办法,欢迎大家一同探讨。

ajax与pjax

AJAX(阿贾克斯),这里说的可不是阿贾克斯俱乐部哦!

AJAX(阿贾克斯)即“Asynchronous Javascript And XML”(异步JavaScript和XML),是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新-无刷新操作。

但是,ajax应用也会造成另外的问题,容易导致浏览器无法前进与后退,这是个很头疼的问题,开发人员必须增加工作量(比如通过一个隐藏的iframe,或者改变location.hash值等方法)来解决。

为了解决传统ajax带来的问题,HTML5里引入了新的API:history.pushState,它和ajax结合后,有个新的称呼是pjax。是一种基于ajax+history.pushState的新技术,该技术可以无刷新改变页面的内容,并且可以改变页面的URL。pjax是ajax+pushState的封装,同时支持本地存储、动画等多种功能。目前支持jquery、qwrap、kissy等多种版本。

HTML5.history.pushState

HTML5可以通过pushState和replaceState接口操作浏览器历史,并且改变当前页面的URL。

pushState是将指定的URL添加到浏览器历史里,存储当前历史记录点。replaceState是将指定的URL替换当前的URL。同时,这些方法会和window.onpostate事件一起工作。

history.pushState(data, title,
url):往历史记录堆栈顶部添加一条记录;data会在onpopstate事件触发时作为参数传递过去;title为页面标题,当前所有浏览器一般都会
忽略此参数;url为页面地址,可选,缺省为当前页地址。具体细节:

state–对象是一个JavaScript状态对象,记录历史记录点的额外对象,可以为空。它关系到由pushState()方法创建出来的新的history实体。用以存储关于你所要插入到历史记录的条目的相关信息。

title—所有浏览器一般都会 忽略此参数,虽然它可能将来会被使用上。而现在最安全的使用方式是传一个空字符串,以防止将来的修改,或者可以传一个简短的标题来表示state。

URL—这个参数用来传递新的history实体的URL,新的url必须和现有的url同域,否则pushState()将抛出异常。这个参数是选填的,如果为空,则会被置为document当前的url。

上图就是十二行代码,关键点在于针对total这个url的循环:history.pushState(0,0,total);不停的在修改url,循环了1000000次,不停的向历史记录堆栈中新增记录,会导致CPU和内存占用率过高以及firefox,chrome,safari浏览器崩溃,而且还能让iPhone重启。

在XP虚拟机(i7单核3.4G、512内存) 亲自实测:

  • 当上面那个循环次数为十万以上级别的时候,CPU,内存使用率瞬间100%,然后崩溃死机;
  • 当上面那个循环次数缩小到10000左右的时候,CPU,内存使用率大概在20秒内逐渐升高至100%,然后崩溃死机;
  • 当上面那个循环次数缩小到500左右的时候,
    CPU使用率逐渐升高到达100%后,再次瞬间恢复到稳定状态,内存使用从130M左右升高至230M左右,而打开的192.168.56.106/12.html这个页面后,地址栏里面的链接也变成了:http://192.168.56.106/0123456789101112131415161718192021……
    494495496497498499

可见,通过循环不停的向向历史记录堆栈中新增记录的同时,页面会刷新到跳转的新地址,就是循环累加的一个“伪地址”,当这个长度超限的时候,就会引起dos了,攻击的效果和效率完全取决于循环的次数和tagret的硬件配置。

相关的防御

相信大家的安全意识已经非常的强悍了,但是还是要警钟长鸣,不要轻信任何陌生人通过任何方式发给你的链接、附件、邮件、图片等任何信息,当然不排除好基友们损友们的恶作剧了,所以小伙伴儿们记得经常Ctrl+S哦,否则被搞死机了也会很郁闷的。

互联网自诞生之日起,就暴露在黑客攻击之下,早期的黑客攻击多少还带有技术试验和炫耀的目的,但随着全球互联网基础设施规模的壮大、连接的无限增长和用户数的急剧膨胀,黑客攻击频率也相应增加,黑客技术也在不断的发展,逐渐出现了以非法获取经济利益为目的的黑色产业链。针对互联网安全防护的技术水平更是突飞猛进,道高一尺魔高一丈,攻与防,在这个互联网时代每分每秒都正在发生着。

网络安全的防护,七分靠技术,三分靠意识,要防护这些问题,除了依靠安全厂商的产品和服务,还需要不断提高网络安全意识。比如:注意个人密码的管理、注意个人隐私的保护、不要轻易接入公共的wifi、不要轻易相信陌生/熟悉朋友的链接或者文件等、注意移动支付的安全、不要让设备“裸奔”等等

作者:刘 欣雨

来源:51CTO

时间: 2024-11-02 10:49:01

12行代码的浏览器DoS攻击分析及防御的相关文章

让浏览器崩溃的12行JS代码(DoS攻击分析及防御)_javascript技巧

Ajax与pjax AJAX即"Asynchronous Javascript And XML"(异步JavaScript和XML),是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数据交换,AJAX可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新-无刷新操作. 但是,ajax应用也会造成另外的问题,容易导致浏览器无法前进与后退,这是个很头疼的问题,开发人员必须增加工作量(比如通过一个隐藏的iframe,或者改变location.ha

关于9行代码导致系统崩溃的分析整理_漏洞研究

目前很多地方都转载着利用9行代码史windows崩溃的文章,不过我发现没有关于为什么会使windows崩溃的分析.我先把原文给大家看看.然后把具体的细节说一下.   微软一直声称Windows XP多么多么稳定可靠,但日前一位名为Masaru Tsuchiyama的外国编程爱好者刊出了一小段C语言代码.这一只有9行的小程序如果在Windows XP/2000下运行,则可导致系统完全崩溃,并重新启动.但此程序对其他版本的Windows没有任何影响.这一产生无限循环输出的小程序的代码如下:   #i

字符集导致的浏览器跨站脚本攻击分析_漏洞研究

|=-------------------------------–=| |=-----–=[ 字符集导致的浏览器跨站脚本攻击 ]=-----–=| |=-------------------------------–=| |=-------------=[ By jianxin ]=------------=| |=-----------=[ jianxin@80sec.com ]=----------=| |=--------------------------------=| 文中<已经被

第一行代码阅读笔记---详解分析第一个Android程序

以下是我根据作者的思路,创建的第一个Android应用程序,由于工具强大,代码都自动生成了,如下: package com.example.first_app; import android.os.Bundle; import android.app.Activity; import android.view.Menu; //MainActivity继承于Activity类 此处用到了java关键字extends public class MainActivity extends Activit

DoS攻击原理和防御方法

TCP/IP协议的权限DoS (拒绝服务攻击)----- Denial of Service 该攻击的原理是利用TCP报文头来做的文章. 下面是TCP数据段头格式. Source Port和 Destination Port :是本地端口和目标端口 Sequence Number 和 Acknowledgment Number :是顺序号和确认号,确认号是希望接收的字节号.这都是32位的,在TCP流中,每个数据字节都被编号.Data offset :表明TCP头包含多少个32位字,用来确定头的长

零日漏洞DoubleAgent的代码注入和持久性攻击技术分析

本文讲的是零日漏洞DoubleAgent的代码注入和持久性攻击技术分析, 近日Cybellum的安全专家发现了一种新型的零日漏洞病毒,该病毒会在攻击计算机前先破坏杀毒软件,Cybellum的安全专家将这种攻击手段命名为 DoubleAgent. DoubleAgent通过向杀毒软件注入代码从而修改杀毒软件的进程,进而获得设备的完整权限来对用户进行攻击. DoubleAgent利用了存在于Microsoft Application Verifier(应用程序检验器)的漏洞,目前确认的受影响的设备包

用100行代码攻击比特币网络的俄罗斯男子

自称 Alister Maclin 的俄罗斯男子过去一周一直在攻击比特币网络.他发动的是所谓的伪造交易 ID 攻击(或称之为 malleability attack),它不具有危险性,只相当于比特币块链服务器收到了垃圾信息,但它会影响交易的确认,导致一些交易平台推迟比特币取款. Alister Maclin 接受采访时说,他只花了几个小时写了 100 行代码的脚本,脚本运行在虚拟机上,捕捉比特币网络广播的交易,然后使用略微不同的 ID 重新广播交易. 它导致交易确认的时间从以前的 10 分钟左右

大型挂马团伙“擒狼”攻击分析及溯源报告

本文讲的是大型挂马团伙"擒狼"攻击分析及溯源报告, 第一章 概述 7月13日,360安全卫士检测到一起网站广告位挂马事件,大量网络广告出现集体挂马,广告内容以同城交友等诱惑信息为主,预警为"擒狼"木马攻击.我们通过对整个挂马攻击的分析溯源发现,这个木马主要功能是锁定浏览器的主页并带有远程控制后门,作者通过木马谋取暴利,是一起典型的黑产行为.  该木马通过漏洞执行,安装服务和驱动,通过驱动锁定浏览器主页,服务实现自启动并将自身注入系统进程.连接C&C下载配置和

一种高级的DoS攻击-Hash碰撞攻击

这是迄今为止第一个让我觉得后怕的攻击方式,涉及的范围广难以防御,攻击效果立竿见影.大量的网站和Web接口都未做Hash碰撞攻击的防御,一拿一个准. 随着RESTful风格的接口普及,程序员默认都会使用json作为数据传递的方式.json格式的数据冗余少,兼容性高,从提出到现在已被广泛的使用,可以说成为了Web的一种标准.无论我们服务端使用什么语言,我们拿到json格式的数据之后都需要做jsonDecode(),将json串转换为json对象,而对象默认会存储于Hash Table,而Hash T