jquery中防刷IP流量软件影响统计的一点对策


Posted in Javascript onJuly 10, 2011

遭遇刷IP、刷流量软件的困扰

      本以为有效控制同一天对同一个IP仅算一次的方案就能有效防止用户多次刷新地址作弊的现象,我得承认涉世未深孤陋寡闻 - -,一直忽视现在的刷流量软件如此的强大,我们的项目也遭遇使用刷流量软件的情况,因而产生不少垃圾数据,甚至影响统计的准确性。

      为解决这种情况也特意下载了两款知名度比较高的刷流量软件“流量宝”和“流量精灵”了解一下,不用不知道,一用确实是个好东西。

      这两款软件的原理都一样,估计其它的也差不多吧,就是利用网络互访原理,利用网络节点地域差异性,用户随机性,使访问效果真实有效,也就是你的电脑挂着一个刷流量的软件的时候,你的地址会被也在挂机的所有用户访问,当然人家帮你刷的同时你也在帮人家刷,这一切功夫软件都在背后帮你完成,挂上几分钟马上就能看到流量慢慢上来,说了不少废话,下面也说说对策。

应对方案

      鉴于部分网友不喜欢看全文就下断论的情况,这里强调一下,所有提交的后台的数据都有做IP检查的,而本文讨论的就是基于这种情况下被刷IP的应对方案。

      方案一:通过Ajax异步提交数据(无效)

      起初推广地址被点击时在后台解析页面是会先记录访客的IP、时间等信息,这种方式显然很难防不了刷流量软件,因此便考虑通过Ajax异步提交数据的形式。

      刚开始还是低估这些流氓软件,以为只是通过简单的模拟http请求不会触发js脚本,所以第一种方案是通过页面加载完成后,通过ajax异步提交记录请求,结果无效,实验证明此方式仅对比较低级的机器人有效;

      方案二:判断请求的客户端浏览器窗口宽度或高度(无效)

      通过方案一可推测这些流量软件不是单纯的模拟http请求, 也就是通过真实的浏览器请求的,但我挂机“被”帮别人刷流量的同时,并未看到任何网页的打开,只能通过抓包工具看到不停的请求,那我猜想这些刷流量软件是不是隐藏了一个浏览器窗口,或者将浏览器窗口设置得很小很小……对此猜想我通过js判断客户端当前打开的浏览器窗口区域是否大于某个值(如宽300px,高200px,相信没什么人会用这么小的区域看网站吧~),超过一个下限值才通过Ajax提交数据。

      结果还是无效,对此也特意写了小程序记录每一个请求的浏览器类型、窗口大小……,结果令我无语,请求的浏览器可视区域都很正常,甚至分辨率很多比我的显示器还高,自我鄙视ing……

      方案三: 通过鼠标事件作为正常访问的依据有效

      通过几番试验,得出的结论是这些机器人并不简单,但毕竟是机器人,那就考虑通过鼠标事件判断是否机器人,如mousemove、mousedown、mouseover等,当然也可以通过让用户选择点击按钮等认为操作作判断依据(当然要考虑操作体验好不好),下面放个简单脚本:

<script src="jquery-1.4.1.min.js" type="text/javascript"></script> 
<script language="javascript" type="text/javascript"> 
$(document).ready(function() { 
var movetimes = 0; //移动次数 
$(document).mousemove(function(even) { 
movetimes++; 
if (movetimes > 100) { //事件被执行次数大于n,设置个比较保守的值 
$(document).unbind("mousemove"); //解除mousemove绑定 
//此处执行异步提交数据 
alert("异步提交记录请求!"); 
} 
}); 
}); 
</script>

总结:

经过多番尝试,最终在第三种方案取得成效,但也不排除日后这些机器人的不断改进而攻破这个简单检验环节,毕竟道高一尺魔高一丈。但机器人毕竟是机器人,不妨多增加点人为操作的条件因素作判断,估计还是能防止这类刷IP流量软件影响统计的。可能由于项目的特殊性,这些方案并不一定适合所有的情形,毕竟这些刷流量软件大多都是些草根站长使用并且通常都是刷自己的网站的:),这里也希望院子里的网友也提提好的建议,如何应对这些刷流量软件,分享下经验。

Javascript 相关文章推荐
关于js中alert弹出窗口文本换行问题简单详细说明
Dec 11 Javascript
jquery Tab效果和动态加载的简单实例
Dec 11 Javascript
jQuery插件支持同一页面被多次调用
Feb 14 Javascript
JavaScript html5 canvas绘制时钟效果(二)
Mar 27 Javascript
jQuery插件编写步骤详解
Jun 03 Javascript
JS简单实现浮动窗口效果示例
Sep 07 Javascript
微信小程序(应用号)开发新闻客户端实例
Oct 24 Javascript
vue的Virtual Dom实现snabbdom解密
May 03 Javascript
详解在 Angular 项目中添加 clean-blog 模板
Jul 04 Javascript
用npm-run实现自动化任务的方法示例
Jan 14 Javascript
element-ui组件table实现自定义筛选功能的示例代码
Mar 15 Javascript
一文了解Vue中的nextTick
May 06 Javascript
让你的CSS像Jquery一样做筛选的实现方法
Jul 10 #Javascript
基于jquery的使ListNav兼容中文首字拼音排序的实现代码
Jul 10 #Javascript
使用Jquery搭建最佳用户体验的登录页面之记住密码自动登录功能(含后台代码)
Jul 10 #Javascript
JQuery 自定义CircleAnimation,Animate方法学习笔记
Jul 10 #Javascript
关于jQuery中的end()使用方法
Jul 10 #Javascript
动感效果的TAB选项卡jquery 插件
Jul 09 #Javascript
使用Jquery打造最佳用户体验的登录页面的实现代码
Jul 08 #Javascript
You might like
php array_map()数组函数使用说明
2011/07/12 PHP
PHP中英混合字符串截取函数代码
2011/07/17 PHP
PHP回溯法解决0-1背包问题实例分析
2015/03/23 PHP
PHP 7的一些引人注目的新特性简单介绍
2015/11/08 PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
2019/10/21 PHP
JS 创建对象(常见的几种方法)
2008/11/03 Javascript
httpclient模拟登陆具体实现(使用js设置cookie)
2013/12/11 Javascript
js+html5通过canvas指定开始和结束点绘制线条的方法
2015/06/05 Javascript
JavaScript实现倒计时代码段Item1(非常实用)
2015/11/03 Javascript
详解JavaScript 中的 replace 方法
2016/01/01 Javascript
jQuery easyui刷新当前tabs的方法
2016/09/23 Javascript
将鼠标焦点定位到文本框最后(代码分享)
2017/01/11 Javascript
javascript验证香港身份证的格式或真实性
2017/02/07 Javascript
Bootstrap的popover(弹出框)在append后弹不出(失效)
2017/02/27 Javascript
Vue组件tree实现树形菜单
2017/04/13 Javascript
详解nodejs的express如何自动生成项目框架
2017/07/12 NodeJs
基于vue打包后字体和图片资源失效问题的解决方法
2018/03/06 Javascript
为jquery的ajax请求添加超时timeout时间的操作方法
2018/09/04 jQuery
vue-form表单验证是否为空值的实例详解
2019/10/29 Javascript
详解Vue后台管理系统开发日常总结(组件PageHeader)
2019/11/01 Javascript
如何用vue-cli3脚手架搭建一个基于ts的基础脚手架的方法
2019/12/12 Javascript
JS原型和原型链原理与用法实例详解
2020/02/05 Javascript
微信小程序实现页面监听自定义组件的触发事件
2020/11/01 Javascript
[00:52]黑暗之门更新 新英雄孽主驾临DOTA2
2016/08/24 DOTA
python清除字符串里非字母字符的方法
2015/07/02 Python
利用Python找出序列中出现最多的元素示例代码
2017/12/08 Python
Python实现的生产者、消费者问题完整实例
2018/05/30 Python
Python+OpenCV实现图像融合的原理及代码
2018/12/03 Python
Python使用Pandas库常见操作详解
2020/01/16 Python
幼儿园优秀教师事迹
2014/02/13 职场文书
先进事迹材料怎么写
2014/12/30 职场文书
学生检讨书范文
2015/01/27 职场文书
北京英文导游词
2015/02/12 职场文书
虚拟机linux端mysql数据库无法远程访问的解决办法
2021/05/26 MySQL
5种 JavaScript 方式实现数组扁平化
2021/10/05 Javascript
2022新作动画《福星小子》释出宣传影片 加入内田真礼&宫野真守配音演出
2022/04/08 日漫