防刷票思考

2023-12-03 05:32
文章标签 思考 防刷票

本文主要是介绍防刷票思考,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文地址:http://blog.segmentfault.com/vboy1010/1190000000656336

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

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

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

1、HTTP_REFERER : 校验 $_SERVER['HTTP_REFERER']。可伪造,使用 CURL

curl_setopt($ch, CURLOPT_REFERER, 'HTTP://www.baidu.com');(攻击手段)

2、IP限制:加上 IP 投票限制。可伪造,使用 CURL

$ip = ***.***.***.***;
$header = array("CLIENT-IP:{$ip}","X-FORWARDED-FOR:{$ip}",
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);(攻击手段)

3、User-Agent:校验 $_SERVER['HTTP_USER_AGENT']。可伪造,使用 CURL

curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.0)");(攻击手段)

4、验证码:采用非常复杂的验证码,可以防止一些菜鸟攻击者。

a:但是专业刷票机可以攻破。如果不用验证码,投票基本就歇菜了。b:验证码获取方式,采用异步加载,即点击输入框时,才去请求。c:投票成功后,删除验证码的 Session

5、登录:用户必须登录才能投票。

a:可以攻破,写程序不断注册新用户,然后用来投票。(攻击手段)b:指定大于某个 UID 的用户,或者某段时间内活跃的用户,才能进行投票。(预防对策)

6、限时投票:投票程序,只在某个时间段内开放。否则,对方半夜刷票,你咋办?

a:从 早 8 点 至 晚 23 点。(预防对策)

7、投票间隔:用户投票后,需要隔多长时间才能继续投。

a:很多投票站点基本上都有这个限制,但是对于更改 IP的攻击,就没办法了。b:针对 UID 限制,可以有效防止攻击,但是可以使用批量注册马甲用户。

8、投票结果展示:延迟展示,友好展示。

a:页面上投票,JS 立马加1,但是刷新页面,不一定立马展示最新投票结果。b:返回状态给页面(感谢您的投票!或者 投票成功!至于有没有成功,另说了!)

9、补票逻辑:常见于一些软件评选之类的投票。

a:有时候软件厂商会为了让自己的票数高一点,会私下给活动举办商 $,后台进行补票。b:后台跑脚本,采用 IP 库,缓慢平滑的增加票数。

10、扣量逻辑:常见于一些软件评选之类的投票。

a:这是个杀手锏,后台跑脚本实时监控异常增长(刷票)的项,然后实施扣量逻辑。b:即对于这个项,投 10 票才算一票。

11、Cookie:常用的手段。比较低级。

a:投票后,在客户端写入 Cookie,下次投票时判断 Cookie 是否存在。b:但是,这种方式非常容易攻破,因为 Cookie 可删除。

12、加密选项 ID:对一些投票选项的ID,进行随机加密。

a:加密算法,加Salt,并且设置有效时间,比如5分钟内。b:服务器端进行解密并且验证。 

13、人工刷票:没办法防。。

a:雇佣了一批水军,进行刷票,这个真没辙,人家确实是花了血本的。

这篇关于防刷票思考的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/448244

相关文章

关于rpc长连接与短连接的思考记录

《关于rpc长连接与短连接的思考记录》文章总结了RPC项目中长连接和短连接的处理方式,包括RPC和HTTP的长连接与短连接的区别、TCP的保活机制、客户端与服务器的连接模式及其利弊分析,文章强调了在实... 目录rpc项目中的长连接与短连接的思考什么是rpc项目中的长连接和短连接与tcp和http的长连接短

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

【编程底层思考】详解Java的JUC多线程并发编程底层组件AQS的作用及原理

Java中的AbstractQueuedSynchronizer(简称AQS)是位于java.util.concurrent.locks包中的一个核心组件,用于构建锁和其他同步器。AQS为实现依赖于FIFO(先进先出)等待队列的阻塞锁和相关同步器提供了一套高效、可扩展的框架。 一、AQS的作用 统一同步状态管理:AQS提供了一个int类型的成员变量state,用于表示同步状态。子类可以根据自己

一道算法题引发的动态内存管理的思考

在做PKU2762时,需要建邻接表。 于是按部就班写了下面一个插入边到邻接表中的函数: const int VMAX = 1010;typedef struct Graph{int vex;Graph* next;}Graph;Graph ArcGraph[VMAX];void insert(int u, int v){Graph* t = new Graph;Graph*

go 和 java 技术选型思考

背景:       go和java我这边自身都在使用,感受比较深,java使用了有7年多,go也就是今年开始的,公司需要所以就学了使用,发现这两个语言都很好,需要根据场景选择,我写下我这边的看法。 关于go和java语言层面和特性就不说了,网上都有,我这边从我这边实际使用的场景情况来说,供大家参考。 给我最大的感受,php转go的不少,也是符合未来技术大趋势的,目前来看,java转go也比较

思考自己写博客的意义

感想 从今年2月份开始,我就要求自己以每周4篇的速度写博客。然而问题是:每周的空闲时间是不稳定的,这导致我没法保证花费相同的时间去输出稳定质量的博客。当时间不够时,我将面临选择:是减少数量来保证稳定的质量,还是降低质量来保证稳定的数量? 我选择的是——牺牲质量。因为,相比于“质量”,“数量”是准确可见的。我担心:一旦有一次没能完成目标数量,便会出现“破窗效应”,让我潜意识里再也不认同“目标”了

是时候重新思考你的Google广告策略了吗?

以产品为中心、仅以关键词为焦点的广告活动是 谷歌广告中常见的一种活动类型。 如果你销售复古女式T恤,你可能会设置基于“复古女式T恤”关键词的独立关键词广告活动。 对于许多B2C零售商来说,这种方法效果不错。但是,对于其他一些商家来说,基于产品和关键词的广告活动并不一定是最好的策略。 比如说,我们接手了一个新的B2B客户的谷歌广告账户,其所有广告活动都是以产品为中心、仅关注关键词的广告活动。

【编程底层思考】如何检测和避免线程死锁

一、什么是线程死锁? 线程死锁发生在多个线程因为争夺资源而相互阻塞,导致程序无法正常结束的情况。例如,线程A持有资源2并等待资源1,线程B持有资源1并等待资源2,这样就形成了死锁。 二、如何检测死锁? 使用jmap、jstack等命令行工具查看JVM的线程栈和堆内存情况,jstack可以显示死锁信息。使用VisualVM、JConsole等图形化工具进行排查。例如,JConsole可以连接到

【个人思考】 Java为什么解释执行时不直接解释源码?

起因 最近学习JVM,产生一个问题:Java为什么解释执行时不直接解释源码? 众所周知,Java 字节码是跨平台的,因此 Java 才能一次编译处处运行。但是,Java 源码本身也是跨平台的啊,为什么不可以省略编译为字节码这一步,直接将源码运行在虚拟机上?如果是效率问题,可不可以在设计 Java 语言的时候解决? 对于此问题,大部分回答诸如:“采用字节码的好处主要包括跨平台性、安全性、性