基于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 FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)
Jul 23 PHP
PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
May 07 PHP
PHP 异步执行方法,模拟多线程的应用分析
Jun 03 PHP
如何在smarty中增加类似foreach的功能自动加载数据
Jun 26 PHP
PHP多线程之内部多线程实例分析
Mar 09 PHP
Zend Framework教程之模型Model基本规则和使用方法
Mar 04 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
Apr 30 PHP
php使用CURL模拟GET与POST向微信接口提交及获取数据的方法
Sep 23 PHP
golang 调用 php7详解及实例
Jan 04 PHP
PHP实现计算器小功能
Aug 28 PHP
PHP实现限制域名访问的实现代码(本地验证)
Sep 13 PHP
PhpStorm+xdebug+postman调试技巧分享
Sep 15 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注销代码(session注销)
2012/05/31 PHP
Windows7下的php环境配置教程
2015/02/28 PHP
PHP判断手机是IOS还是Android
2015/12/09 PHP
PHP-FPM实现性能优化
2016/03/31 PHP
php 7新特性之类型申明详解
2017/06/06 PHP
PHP设计模式(五)适配器模式Adapter实例详解【结构型】
2020/05/02 PHP
jQuery计算textarea中文字数(剩余个数)的小程序
2013/11/28 Javascript
jquery教程ajax请求json数据示例
2014/01/13 Javascript
javascript实现相同事件名称,不同命名空间的调用方法
2015/06/26 Javascript
基于BootStrap Metronic开发框架经验小结【三】下拉列表Select2插件的使用
2016/05/12 Javascript
浅谈JavaScript 浏览器对象
2016/06/03 Javascript
基于bootstrap的选择框插件icheck
2016/12/23 Javascript
JS实现复制内容到剪贴板功能
2017/02/05 Javascript
JS 实现随机验证码功能
2017/02/15 Javascript
实现单层json按照key字母顺序排序的示例
2017/12/06 Javascript
vue.js $refs和$emit 父子组件交互的方法
2017/12/20 Javascript
解决vue打包项目后刷新404的问题
2018/03/06 Javascript
vue-cli3+typescript初体验小结
2019/02/28 Javascript
如何使用proxy实现一个简单完整的MVVM库的示例代码
2019/09/17 Javascript
vue.js实现三级菜单效果
2019/10/19 Javascript
python局部赋值的规则
2013/03/07 Python
python实现将html表格转换成CSV文件的方法
2015/06/28 Python
利用python程序生成word和PDF文档的方法
2017/02/14 Python
恢复百度云盘本地误删的文件脚本(简单方法)
2017/10/21 Python
python快速建立超简单的web服务器的实现方法
2018/02/17 Python
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
2018/04/24 Python
pytorch 调整某一维度数据顺序的方法
2018/12/08 Python
Python使用crontab模块设置和清除定时任务操作详解
2019/04/09 Python
Python 实现黑客帝国中的字符雨的示例代码
2020/02/20 Python
使用Python绘制台风轨迹图的示例代码
2020/09/21 Python
css3实现椭圆轨迹旋转的示例代码
2018/10/29 HTML / CSS
HTML5 UTF-8 中文乱码的解决方法
2013/11/18 HTML / CSS
店长岗位职责
2013/11/21 职场文书
黄石寨导游词
2015/02/05 职场文书
《英雄联盟》2022日蚀、月蚀皮肤演示 黑潮亚索曝光
2022/04/13 其他游戏
解决Git推送错误non-fast-forward的方法
2022/06/25 Servers