基于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 相关文章推荐
用header 发送cookie的php代码
Mar 16 PHP
深入理解PHP之require/include顺序 推荐
Jan 02 PHP
PHP无限分类(树形类)的深入分析
Jun 02 PHP
php结合js实现点击超链接执行删除确认操作
Oct 31 PHP
php采用curl模仿登录人人网发布动态的方法
Nov 07 PHP
php文件上传简单实现方法
Jan 24 PHP
php备份数据库类分享
Apr 14 PHP
PHP、Java des加密解密实例
Apr 27 PHP
php探针使用原理和技巧讲解
Sep 17 PHP
基于Laravel-admin 后台的自定义页面用法详解
Sep 30 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
Nov 25 PHP
详解PHP中的8个魔术常量
Jul 06 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 8小时时间差的解决方法小结
2009/12/22 PHP
php语言流程控制中的主动与被动
2012/11/05 PHP
destoon数据库表说明汇总
2014/07/15 PHP
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
PHP convert_uudecode()函数讲解
2019/02/14 PHP
Yii2框架配置文件(Application属性)与调试技巧实例分析
2019/05/27 PHP
使用原生javascript创建通用表单验证——更锋利的使用dom对象
2011/09/13 Javascript
jQuery+css+html实现页面遮罩弹出框
2013/03/21 Javascript
javascript获取网页中指定节点的父节点、子节点的方法小结
2013/04/24 Javascript
jsp js鼠标移动到指定区域显示选项卡离开时隐藏示例
2013/06/14 Javascript
jQuery设置与获取HTML,文本和值的简单实例
2014/02/26 Javascript
Jquery遍历Json数据的方法
2015/04/20 Javascript
详解JavaScript逻辑And运算符
2015/12/04 Javascript
jQuery+ajax实现实用的点赞插件代码
2016/07/06 Javascript
js 将图片连接转换成base64格式的简单实例
2016/08/10 Javascript
JS实现简单的tab切换选项卡效果
2016/09/21 Javascript
JavaScript对象_动力节点Java学院整理
2017/06/23 Javascript
通过实例解析js可枚举属性与不可枚举属性
2020/12/02 Javascript
在Python的web框架中配置app的教程
2015/04/30 Python
python使用pil生成图片验证码的方法
2015/05/08 Python
python学生管理系统代码实现
2020/04/05 Python
对python中数组的del,remove,pop区别详解
2018/11/07 Python
python文字和unicode/ascll相互转换函数及简单加密解密实现代码
2019/08/12 Python
python nmap实现端口扫描器教程
2020/05/28 Python
pytorch实现建立自己的数据集(以mnist为例)
2020/01/18 Python
Python 格式化输出_String Formatting_控制小数点位数的实例详解
2020/02/04 Python
Python3+selenium实现cookie免密登录的示例代码
2020/03/18 Python
基于Python的Jenkins的二次开发操作
2020/05/12 Python
python实现凯撒密码、凯撒加解密算法
2020/06/11 Python
什么是Python包的循环导入
2020/09/08 Python
HTML5 localStorage使用总结
2017/02/22 HTML / CSS
美国在线医疗分销商:MedEx Supply
2020/02/04 全球购物
最受欢迎的自我评价
2013/12/22 职场文书
建筑设计专业求职自我评价
2014/03/02 职场文书
事业单位分类改革实施方案
2014/03/21 职场文书
vue-treeselect的基本用法以及解决点击无法出现拉下菜单
2022/04/30 Vue.js