安全设计--防止人为刷票

网上各种投票特别多,很多没有做好安全设计,在各种投票漏洞,可以存在人为各种投票。最近发现有个站做法很值得大家借鉴,之前也听说过这种方法,可能之前关注不多,只是没有遇到过;https://www.wenjuan.in/

一般防止重复投票,有http报文加签名,限制IP,限制浏览器,限制设备等。这些方法一般都可以通过技术手段绕过。而此站他们是在http报文里有个参数,是通过js方法动态计算出来的,即需要通过浏览器渲染,才能计算。方法名及方法体通过参数动生成的。 

他们做法是:如有个简单投票 https://www.wenjuan.in/s/m6N3yeo/  ,用浏览器打开这个页面时会加载一段js代码。其中

var show_vcode = false;
var estimate_map = {"5a7d604292beb53979067ff3": 4};
var total_seconds = 7;
var rand_int = 51;
var s_func_id = "78";
var vvv = "f76d6013749255a7a8768888c810fe28";
var func_name = "hEtdqAvW";

eval(eval("s1(10)+s1(102)+s1(117)+s1(110)+s1(99)+s1(116)+s1(105)+s1(111)+s1(110)+s1(32)+s1(104)+s1(69)+s1(116)+s1(100)+s1(113)+s1(65)+s1(118)+s1(87)+s1(40)+s1(112)+s1(51)+s1(55)+s1(50)+s1(41)+s1(32)+s1(123)+s1(10)+s1(32)+s1(32)+s1(32)+s1(32)+s1(114)+s1(101)+s1(116)+s1(117)+s1(114)+s1(110)+s1(32)+s1(56)+s1(45)+s1(51)+s1(42)+s1(49)+s1(48)+s1(43)+s1(57)+s1(45)+s1(54)+s1(42)+s1(55)+s1(42)+s1(52)+s1(43)+s1(53)+s1(43)+s1(112)+s1(51)+s1(55)+s1(50)+s1(59)+s1(10)+s1(125)+s1(10)"));

其中js方法名(函数名)通过参数func_name 服务端动态生成,下面一段eval生成对应的函数体。function hEtdqAvW(p372) {

    return 8-3*10+9-6*7*4+5+p372;}

函数体也是服务后台动态生成以页面js脚本形式,返回给前端。

在投票提交表单时,通过一个另一个js调这个函数拼接此参数到http报文里。完成一次投票。

此种方法很好防止通过一般程序重复投票,可以阻止绝大部分的人。当然只靠此一种手法还是做不到防止人为刷票,如通过UI自动化手动也可以绕过,当然再加上其他防止刷票手段,就可以防止了。

如果你有对外开放的公共数据服务接口,此种方法也可以防止人为恶意爬取你的数据。对于能操作浏览器内核的人来说,他还是可以绕过。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值