基于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 相关文章推荐
在PHP中利用XML技术构造远程服务(上)
Oct 09 PHP
php&java(一)
Oct 09 PHP
php下实现一个阿拉伯数字转中文数字的函数
Jul 10 PHP
关于session在PHP5的配置文件中的详细设置参数说明
Apr 20 PHP
使用Apache的htaccess防止图片被盗链的解决方法
Apr 27 PHP
PHP防止post重复提交数据的简单例子
Jun 07 PHP
本地计算机无法启动Apache故障处理
Aug 08 PHP
php生成html文件方法总结
Dec 01 PHP
PHP统计数值数组中出现频率最多的10个数字的方法
Apr 20 PHP
php文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名)
May 09 PHP
PHP查询大量数据内存耗尽问题的解决方法
Oct 28 PHP
Laravel基础-关于引入公共文件的两种方式
Oct 18 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生成WAP页面
2006/10/09 PHP
使用ThinkPHP自带的Http类下载远程图片到本地的实现代码
2011/08/02 PHP
PHP获取一年中每个星期的开始和结束日期的方法
2015/02/12 PHP
javascript 表格排序和表头浮动效果(扩展SortTable)
2009/04/07 Javascript
Javascript面向对象编程(三) 非构造函数的继承
2011/08/28 Javascript
Javascript继承(上)——对象构建介绍
2012/11/08 Javascript
JS弹出窗口代码大全(详细整理)
2012/12/21 Javascript
实现动画效果核心方式的js代码
2013/09/27 Javascript
javascript+canvas制作九宫格小程序
2014/12/28 Javascript
jQuery实现表格行上移下移和置顶的方法
2015/05/22 Javascript
javascript 数组去重复(在线去重工具)
2016/12/17 Javascript
在 Angular2 中实现自定义校验指令(确认密码)的方法
2017/01/23 Javascript
w3c编程挑战_初级脚本算法实战篇
2017/06/23 Javascript
JS动画实现回调地狱promise的实例代码详解
2018/11/08 Javascript
JavaScript实现简单轮播图效果
2018/12/01 Javascript
python 图片验证码代码
2008/12/07 Python
Python中__name__的使用实例
2015/04/14 Python
在Python的gevent框架下执行异步的Solr查询的教程
2015/04/16 Python
Python通过90行代码搭建一个音乐搜索工具
2015/07/29 Python
对Python 获取类的成员变量及临时变量的方法详解
2019/01/22 Python
python实现微信每日一句自动发送给喜欢的人
2019/04/29 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
2019/05/16 Python
python识别文字(基于tesseract)代码实例
2019/08/24 Python
Python 共享变量加锁、释放详解
2019/08/28 Python
Python生成器常见问题及解决方案
2020/03/21 Python
Python xlrd模块导入过程及常用操作
2020/06/10 Python
pytorch 中forward 的用法与解释说明
2021/02/26 Python
CSS3改变浏览器滚动条样式
2019/01/04 HTML / CSS
美国最大的万圣节服装网站:HalloweenCostumes.com
2017/10/12 全球购物
我们没有写servlet的构造方法,那么容器是怎么创建servlet的实例呢
2013/04/24 面试题
合作协议书范本
2014/04/17 职场文书
签字仪式主持词
2015/07/03 职场文书
2019感恩宣传标语!
2019/07/05 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers
MYSQL 运算符总结
2021/11/11 MySQL
Win11如何修改dns?Win11修改dns图文教程
2022/01/18 数码科技