基于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中正则表达式的使用方法描述
Jul 30 PHP
PHP中的生成XML文件的4种方法分享
Oct 06 PHP
php setcookie(name, value, expires, path, domain, secure) 参数详解
Jun 28 PHP
php+ajax实现图片文件上传功能实例
Jun 17 PHP
ThinkPHP2.x防范XSS跨站攻击的方法
Sep 25 PHP
php实现scws中文分词搜索的方法
Dec 25 PHP
Yii2实现上下联动下拉框功能的方法
Aug 10 PHP
PHP+Ajax 检测网络是否正常实例详解
Dec 16 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
May 11 PHP
PDO::inTransaction讲解
Jan 28 PHP
PHP中$GLOBALS与global的区别详解
Mar 21 PHP
php实现网页上一页下一页翻页过程详解
Jun 28 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对包含html标签的字符串进行截取的函数分享
2014/06/19 PHP
laravel框架如何设置公共头和公共尾
2019/10/22 PHP
PHP基于array_unique实现二维数组去重
2020/07/14 PHP
JQuery AJAX提交中文乱码的解决方案
2010/07/02 Javascript
javascript内置对象操作详解
2015/02/04 Javascript
jquery 插件实现瀑布流图片展示实例
2015/04/03 Javascript
Javascript实现字数统计
2015/07/03 Javascript
基于jQuery实现仿百度首页换肤背景图片切换代码
2015/08/25 Javascript
浅谈javascript中的Function和Arguments
2016/08/30 Javascript
利用JQuery阻止事件冒泡
2016/12/01 Javascript
NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解
2017/05/13 NodeJs
vue2.0组件之间传值、通信的多种方式(干货)
2018/02/10 Javascript
JavaScript中set与get方法用法示例
2018/08/15 Javascript
vue实现键盘输入支付密码功能
2018/08/18 Javascript
vue输入节流,避免实时请求接口的实例代码
2019/10/30 Javascript
Vue为什么要谨慎使用$attrs与$listeners
2020/08/27 Javascript
python网络编程学习笔记(五):socket的一些补充
2014/06/09 Python
django模型中的字段和model名显示为中文小技巧分享
2014/11/18 Python
总结用Pdb库调试Python的方式及常用的命令
2016/08/18 Python
浅谈Python2获取中文文件名的编码问题
2018/01/09 Python
在IPython中执行Python程序文件的示例
2018/11/01 Python
python实现flappy bird游戏
2018/12/24 Python
python实现狄克斯特拉算法
2019/01/17 Python
python求加权平均值的实例(附纯python写法)
2019/08/22 Python
解决python3插入mysql时内容带有引号的问题
2020/03/02 Python
Python如何把十进制数转换成ip地址
2020/05/25 Python
HTML5 Canvas的事件处理介绍
2015/04/24 HTML / CSS
保洁主管岗位职责
2013/11/20 职场文书
自行车租赁公司创业计划书
2014/01/28 职场文书
优秀应届生求职信
2014/06/16 职场文书
中学生教师节演讲稿
2014/09/03 职场文书
2014年社区个人工作总结
2014/12/02 职场文书
孔庙导游词
2015/02/04 职场文书
雨花台导游词
2015/02/06 职场文书
北大自主招生自荐信
2015/03/04 职场文书
海贼王十大逆天果实 魂魂果实上榜,岩浆果实攻击力最强
2022/03/18 日漫