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

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

基于 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

具体脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/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给大家讲解防刷票的一些技巧的更多相关文章

  1. 防刷票机制研究和.NET HttpRequest Proxy

    最近应朋友之约 测试他做的投票网站 防刷票机制能力如何,下面有一些心得和体会. 朋友网站用PHP写的,走的是HttpRequest,他一开始认为IP认证应该就差不多了.但说实话这种很low,手动更换代 ...

  2. 基于DES算法加密的防撞库密码系统项目总结

    项目内容:基于DES算法加密的防撞库密码系统 小组名:zqhzkzkj 目标:1.对用户输入的8位字符进行DES加密,要求用户输入8位密钥 2.对于不同的网站,不同的用户名生成不同的密码 小组成员:周 ...

  3. 基于timestamp和nonce的防重放攻击

    以前总是通过timestamp来防止重放攻击,但是这样并不能保证每次请求都是一次性的.今天看到了一篇文章介绍的通过nonce(Number used once)来保证一次有效,感觉两者结合一下,就能达 ...

  4. iOS实现图片裁剪功能,基于TKImageView完善与讲解

    1.功能需求:需要实现图片区域裁剪功能. 2.效果图:     3.实现原理:本来想自己实现的,刚好看到一个比较好的库:TKImageView,下载好研究了下,发现基本都能满足我的需求,而且封装的也比 ...

  5. PHP教程-防止网站被刷票的小技巧

    在Web开发中,投票模块会经常出现.这样就使得防止刷票,成了至关重要的技术.以下是兄弟连教育www.itxdl.cn总结的一些防止刷票方法: 1. IP限制 这是使用的最多,也是最广泛,不可少的刷票限 ...

  6. C# 刷票程序

    上个月有人让我帮忙投票,我想要不写个程序给他多刷点得了,虽然这事情有悖原则,就当娱乐了.. 先上图 1.分析 既然是网页投票,那肯定可以伪造HTTP请求来实现刷票.需要分析的就是该网站到底采用了哪些防 ...

  7. 【转】基于DM8168的视频智能分析系统的设计方案

        [导读] 为了实现高清视频的智能分析功能,本文介绍了一种以TI公司的DM8168为核心的高清视频智能分析系统的设计方案,该方案从硬件设计和软件设计两个方面介绍了硬件组成.工作流程.软件架构,并 ...

  8. VB 共享软件防破解设计技术初探(三)

    ×××××××××××××××××××××××××××××××××××××××××××××× 其他文章快速链接: VB 共享软件防破解设计技术初探(一)http://bbs.pediy.com/sho ...

  9. 关于PHP写的投票网站之刷票风云

    最近学校导航站找我让我给他们做一个投票系统的网站,我一口答应了,他们只是要求不准刷票情况出现,我也一口答应了..我答应的太干脆了. 然后我便开始做这个网站,网站做出来没花太多时间,并且我是用IP来判断 ...

随机推荐

  1. Ruby零碎笔记

    Ruby零碎笔记 飞机上阅读pdf的笔记,因为不联网,内容不多而且比较零散,以tips的形式记录 tips 查看当前作用域的变量 puts local_variables ruby中方法传递参数时,括 ...

  2. nullptr/NULL

    NULL vs nullptr 在过去,我们如果要表示一个指针为空,我们条件反射肯定会这么写: int *p = NULL; 然而啊,有没有想过这是有问题的,比如下面的这段代码: #include & ...

  3. GMA Round 1 抛硬币

    传送门 抛硬币 扔一个硬币,正面概率为0.6.扔这枚硬币666次,正面就得3分,反面就得1分,求总分的方差. 直接套公式$np(1-p)*(X-Y)^2=666*0.6*(1-0.6)*(3-1)^2 ...

  4. JAVA自学作业02

    JAVA自学作业02 1.什么是标识符?由哪些部分组成?常见的命名规则有哪些? 标识符是用户为变量的内存空间所定义的字符序列: 可以由字母.下划线.美元符号以及数字组成,但数字不可作为首字符.标识符不 ...

  5. MySql的优化步骤

    MySql优化的一般步骤: 1.通过show status 命令了解各种sql的执行效率 SHOW STATUS提供msyql服务器的状态信息 一般情况下,我们只需要了解以”Com”开头的指令 sho ...

  6. centos安装系统全过程

    --查看系统 lsb_release -a --查看端口 netstat -lnp|grep 80 ps 进程ID #查看进程的详细信息 kill -9 进程ID --查看Java 版本 java - ...

  7. SSH error ( Read from socket failed: Connection reset by peer ) and it's solution

    SSH error ( Read from socket failed: Connection reset by peer ) and it's solution ssh cann't connect ...

  8. Asp.Net 自定义设置Http缓存示例(一)

    一.自定义图片输出,启用客户端的图片缓存处理 代码示例: string path = Request.Url.LocalPath; if (path != null) { path = path.To ...

  9. Scikit-learn 概述

    https://www.leiphone.com/news/201701/ZJMTak4Y8ch3Nwd0.html

  10. idea java9以及以上 出现找不到class的情况

    https://juejin.im/entry/59cdb7e65188255d3448fc64 https://blog.jetbrains.com/idea/2017/03/support-for ...