基于PHP给大家讲解防刷票的一些技巧


Posted in PHP onNovember 18, 2015

刷票行为,一直以来都是个难题,无法从根本上防止。

但是我们可以尽量减少刷票的伤害,比如:通过人为增加的逻辑限制。

基于 PHP,下面介绍防刷票的一些技巧:

1、使用CURL进行信息伪造

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://localhost/2.php");
curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:8.8.8.8', 'CLIENT-IP:8.8.8.8'));
curl_setopt($ch, CURLOPT_REFERER, "http://localhost/ ");
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.0)");
$out = curl_exec($ch);
curl_close($ch);

2、验证码:采用非常复杂的验证码

确切的说验证码的出现不是针对于人,而是针对于机器。通过复杂度和识别难易度的控制来阻拦掉一部分刷票机,从而减少刷票的发生。但随着软件技术、识别技术的发展越来越多的验证码面对着先进的刷票软件也失去了其防范的作用、但是专业刷票机可以攻破。如果不用验证码,投票基本就歇菜了,验证码获取方式,采用异步加载,即点击输入框时,才去请求,投票成功后,删除验证码的 Session

3、限时投票

比如:从早8点至晚23 点

4、设置投票间隔

用户投票后,需要隔多长时间才能继续投。

很多投票站点基本上都有这个限制,但是对于更改 IP的攻击,就没办法了

5、投票结果展示:延迟展示,友好展示

页面上投票,JS 立马加1,但是刷新页面,不一定立马展示最新投票结果,返回状态给页面(感谢您的投票!或者 投票成功!至于有没有成功,另说了!)

6、扣量逻辑:常见于一些软件评选之类的投票

这是个杀手锏,后台跑脚本实时监控异常增长(刷票)的项,然后实施扣量逻辑
即对于这个项,投 10 票才算一票

7、Cookie:常用的手段。比较低级

投票后,在客户端写入 Cookie,下次投票时判断 Cookie 是否存在
但是,这种方式非常容易攻破,因为 Cookie 可删除

8、加密选项 ID:对一些投票选项的ID,进行随机加密

加密算法,加Salt,并且设置有效时间,比如5分钟内
服务器端进行解密并且验证

9、nginx限制链接数

ngx_http_limit_conn_module
ngx_http_limit_req_module
nginx_limit_speed_module

可以使用这三个模块来限制,不过这不是一个好的解决方法

10、iptables限制

/sbin/iptables -A INPUT -p tcp --dport 80 --syn -m recent --name webpool --rcheck --seconds 60 --hitcount 10 -j DROP
/sbin/iptables -A INPUT -p tcp --dport 80 --syn -m recent --name webpool --set -j ACCEPT
/sbin/iptables -t filter -A INPUT -p tcp --dport 80 --tcp-flags FIN,SYN,RST,ACK SYN -m connlimit --connlimit-above 10 --connlimit-mask
 32 -j REJECT

具体脚本

#!/bin/bash
# Date: 2015-09-29
# # Author: cpz@erongtu.com
shopt -s -o nounset
export PATH=/usr/bin/:/bin
iptables_log="/tmp/iptables_conf.log"
/sbin/iptables -A INPUT -p tcp --dport 80 --syn -m recent --name webpool --rcheck --seconds 60 --hitcount 10 -j DROP
/sbin/iptables -A INPUT -p tcp --dport 80 --syn -m recent --name webpool --set -j ACCEPT
/sbin/iptables -t filter -A INPUT -p tcp --dport 80 --tcp-flags FIN,SYN,RST,ACK SYN -m connlimit --connlimit-above 10 --connlimit-mask 32 -j REJECT
while [ true ]; do
  #sleep 1
  for IP in `netstat -an | grep -i ':80 '|grep 'ESTAB' | awk '{print $5}' | cut -d : -f 1 | sort | uniq -c | awk '{if($1 > 30 && $2!="127.0.0.1" ) {print $2}}'`
  do
    /sbin/iptables -L -n | grep $IP >/dev/null || /sbin/iptables -A INPUT -p tcp --dport 80 -s $IP -j DROP
    echo "/sbin/iptables -A INPUT -p tcp -s $IP -j DROP" >> ${iptables_log}
  done
done

以上内容就是小编给大家介绍基于PHP给大家讲解防刷票的一些技巧,希望大家喜欢。

PHP 相关文章推荐
Mysql的GROUP_CONCAT()函数使用方法
Mar 28 PHP
使用PHP的日期与时间函数技巧
Apr 24 PHP
PHP 中执行排序与 MySQL 中排序
Apr 21 PHP
snoopy 强大的PHP采集类使用实例代码
Dec 09 PHP
php fsockopen伪造post与get方法的详解
Jun 14 PHP
php使用qr生成二维码的示例分享
Jan 20 PHP
C#使用PHP服务端的Web Service通信实例
Apr 08 PHP
php制作动态随机验证码
Feb 12 PHP
php动态生成缩略图并输出显示的方法
Apr 20 PHP
win7系统配置php+Apache+mysql环境的方法
Aug 21 PHP
PHP中echo与print区别点整理
Mar 09 PHP
如何用PHP实现分布算法之一致性哈希算法
May 26 PHP
使用PHP uniqid函数生成唯一ID
Nov 18 #PHP
使用PHP实现生成HTML静态页面
Nov 18 #PHP
php+ajax无刷新上传图片实例代码
Nov 17 #PHP
php计算年龄精准到年月日
Nov 17 #PHP
php实现简单的上传进度条
Nov 17 #PHP
PHP安装threads多线程扩展基础教程
Nov 17 #PHP
超详细的php用户注册页面填写信息完整实例(附源码)
Nov 17 #PHP
You might like
PHP mkdir()定义和用法
2009/01/14 PHP
如何给phpcms v9增加类似于phpcms 2008中的关键词表
2013/07/01 PHP
PHP的Laravel框架中使用消息队列queue及异步队列的方法
2016/03/21 PHP
PHP去除字符串最后一个字符的三种方法实例
2017/03/01 PHP
让图片旋转任意角度及JQuery插件使用介绍
2013/03/20 Javascript
现代 JavaScript 开发编程风格Idiomatic.js指南中文版
2014/05/28 Javascript
轻松创建nodejs服务器(1):一个简单nodejs服务器例子
2014/12/18 NodeJs
jQuery异步上传文件插件ajaxFileUpload详细介绍
2015/05/19 Javascript
理解Javascript文件动态加载
2016/01/29 Javascript
深入解析Backbone.js框架的依赖库Underscore.js的作用
2016/05/07 Javascript
vue分页组件table-pagebar使用实例解析
2020/11/15 Javascript
jQuery实现的无限级下拉菜单功能示例
2016/09/12 Javascript
javascript 实现文本使用省略号替代(超出固定高度的情况)
2017/02/21 Javascript
vue弹窗插件实战代码
2018/09/08 Javascript
JavaScript switch语句使用方法简介
2019/12/30 Javascript
node中短信api实现验证码登录的示例代码
2021/01/20 Javascript
[02:36]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma 选手采访
2021/03/11 DOTA
pyqt4教程之widget使用示例分享
2014/03/07 Python
python统计一个文本中重复行数的方法
2014/11/19 Python
Pandas 数据处理,数据清洗详解
2018/07/10 Python
对pandas中两种数据类型Series和DataFrame的区别详解
2018/11/12 Python
python+webdriver自动化环境搭建步骤详解
2019/06/03 Python
三个python爬虫项目实例代码
2019/12/28 Python
在spyder IPython console中,运行代码加入参数的实例
2020/04/20 Python
Python request使用方法及问题总结
2020/04/26 Python
python 星号(*)的多种用途
2020/09/21 Python
Pytorch之扩充tensor的操作
2021/03/04 Python
理工大学毕业生自荐信
2013/11/01 职场文书
单位门卫岗位职责
2013/12/20 职场文书
渠道运营商合作协议书范本
2014/10/06 职场文书
辩护词范文大全
2015/05/21 职场文书
感恩教师主题班会
2015/08/12 职场文书
不知如何爱孩子,这些方法教会您
2019/08/06 职场文书
《童年》读后感(三篇)
2019/08/27 职场文书
手把手教你从零开始react+antd搭建项目
2021/06/03 Javascript
JS中forEach()、map()、every()、some()和filter()的用法
2022/05/11 Javascript