博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于防刷票的一些问题
阅读量:7006 次
发布时间:2019-06-27

本文共 2510 字,大约阅读时间需要 8 分钟。

 

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

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

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

1、使用CURL进行信息伪造

1
2
3
4
5
6
7
8
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 
""
);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'X-FORWARDED-FOR:8.8.8.8'
'CLIENT-IP:8.8.8.8'
));
curl_setopt($ch, CURLOPT_REFERER, 
" "
);
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限制

1
2
3
4
/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

具体脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/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

 

转载地址:http://xmytl.baihongyu.com/

你可能感兴趣的文章
代码调试--自定义一个简单的debug函数
查看>>
T4语法快速入门
查看>>
OOP 第四章博客总结
查看>>
JAVAEE——SpringBoot配置篇:配置文件、YAML语法、文件值注入、加载位置与顺序、自动配置原理...
查看>>
洛谷 P1044 栈
查看>>
springMVC学习(2)
查看>>
【CentOS-7+ Ambari 2.7.0 + HDP 3.0+HAWQ2.3.00】遭遇问题及解决记录
查看>>
总结-jQuery
查看>>
Spring 声明式事务
查看>>
Eclipse中将含有图片资源的项目打包成jar文件
查看>>
【剑指offer12】矩阵中的路径(回朔法),C++实现
查看>>
Bzoj2342 [Shoi2011]双倍回文
查看>>
git-git使用
查看>>
Kubernetes安装
查看>>
MyBatis(1)优点&介绍&工程
查看>>
类UNIX操作系统概念
查看>>
常用Eclipse快捷方式
查看>>
树上各种DFS姿势算法笔记
查看>>
Windbg学习 (0x0008) 命令-符号文件/符号
查看>>
1、脱硫塔工作原理
查看>>