【小镇的技术天梯】刷票与防刷票的思考

本文通过小镇举办的投票活动,探讨了刷票现象及其对程序猿的挑战。作者模拟了刷票过程,发现仅凭uid、openid和selfopenid参数即可伪造投票。为防止刷票,提出了利用openid唯一性结合Redis存储随机字符串的解决方案,以此增加伪造难度并确保投票有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【小镇最近做的感动南通的投票活动目前有大概40w左右的投票记录,小镇通过筛选和排查,发现3000多条有刷票嫌疑的记录,虽然说这些记录对于总的投票活动来说基本上是九牛一毛,但是这触及了程序猿的底线,你能刷票,就证明我的代码有问题,小镇必须排查和完善】

【虽然说通过验证码机制可以很好的防止刷票,但是如果有了验证码,谁还愿意投票?本来点一下就可以投票的事情硬要输入无聊的4个字符实乃是丢失参与度的最好方法哈哈,因为有微信网页授权的验证机制,所以刷票不是非常容易就能实现的。小镇这次来自己模仿一下如何刷票和反刷票。】

1、小镇来刷票!

首先打开投票的网页,咱可以看到下方的我要投票按钮,点开浏览器的F12查看该按钮的代码,如下图所示:


【在这里,我们可以看到“我要投票”按钮的id是woyaotoupiao,那么就在js的文件中查找关于woyaotoupiao这个id的相关点击事件,好,我们在下面找到了相应的代码,如下图所示:】


我们可以看到事件中是按钮的点击事件向toupiaoPHP.php文件发送了异步的post请求,其中的参数携带了uid,openid,和selfopenid。

【明眼人一眼就看到了刷票的希望,对啊,反正只要向这个php文件发送post请求就可以刷票了,至于toupiaoPHP.php文件里面的验证机制咱可以慢慢猜,但是只通过这三个参数的可伪造性和不固定性就可以随便刷啦!!】

这个发POST请求的不用小镇教了吧。。基础中的基础,用php中的curl函数。然后携带参数就行啦,反正给个示例代码大家看看就行啦。

这里我们定义个要发送的数组对吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值