V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
imlewc
V2EX  ›  程序员

大家对无登陆投票防刷的设计有什么想法?

  •  1
     
  •   imlewc · 2015-01-14 15:36:07 +08:00 · 5585 次点击
    这是一个创建于 3607 天前的主题,其中的信息可能已经有所发展或是发生改变。

    ---_-

    27 条回复    2015-01-15 17:52:21 +08:00
    loading
        1
    loading  
       2015-01-14 15:39:20 +08:00 via Android
    ip,浏览器指纹
    vwhenx2
        2
    vwhenx2  
       2015-01-14 15:40:51 +08:00
    验证码
    jjit
        3
    jjit  
       2015-01-14 15:41:24 +08:00
    手机验证码?
    ETiV
        4
    ETiV  
       2015-01-14 15:53:40 +08:00 via iPhone
    记录投票时的时间和IP;
    保留第一手证据

    投票期间正常展示数据;
    这样刷票的自己会认为刷票是成功了的

    统计结果的时候再处理刷票的;

    当然少不了“我拥有最终解释权”
    Daniel65536
        5
    Daniel65536  
       2015-01-14 15:58:00 +08:00 via iPhone   ❤️ 2
    hashcash
    Had
        6
    Had  
       2015-01-14 16:01:44 +08:00
    gamexg
        7
    gamexg  
       2015-01-14 18:07:48 +08:00
    @ETiV 结束时会很热闹.

    提高对方成本,ip限制.

    复杂js计算限制只能用浏览器

    浏览器指纹

    动态变换表单结构让刷票软件需要不断更新.
    imlewc
        8
    imlewc  
    OP
       2015-01-14 19:17:08 +08:00
    @ETiV 好牛B的感觉
    imlewc
        9
    imlewc  
    OP
       2015-01-14 19:18:17 +08:00
    @ETiV 但是 内网的用户出去是一个ip 怎么办
    typcn
        10
    typcn  
       2015-01-14 19:20:17 +08:00
    表单数据 AES 加密起来,密钥啥的都随机产生,然后把页面上的 JS 混淆一下,顺便把 CryptoJS 的库都混淆全混一块,大大增加解密难度,第二天再换换算法
    ETiV
        11
    ETiV  
       2015-01-14 19:20:55 +08:00 via iPhone
    @gamexg 可以在统计的时候,发现刷票的,让运营人员主动联系对方。摆明证据,给对方一个解释的机会。

    不过成本会增加不少。
    ETiV
        12
    ETiV  
       2015-01-14 19:22:37 +08:00 via iPhone
    @imlewc 内网IP……
    你可以自己做个规定撒

    24小时内同一IP有效投票12个?100个?
    imlewc
        13
    imlewc  
    OP
       2015-01-14 19:23:38 +08:00
    js 获取mac地址 这种大家觉得有什么漏洞
    imlewc
        14
    imlewc  
    OP
       2015-01-14 19:24:10 +08:00
    @ETiV 觉得js获取mac地址怎么样
    vwhenx2
        15
    vwhenx2  
       2015-01-14 19:24:57 +08:00
    @imlewc 怎么可能获取到MAC地址。。。
    imlewc
        16
    imlewc  
    OP
       2015-01-14 19:27:18 +08:00
    akira
        17
    akira  
       2015-01-14 20:28:02 +08:00
    @imlewc 只针对IE且客户端的IE允许AcitiveX运行
    loading
        18
    loading  
       2015-01-14 20:31:59 +08:00 via Android
    @ETiV 也就是说:你们随便刷,我自己写结果,哈哈
    quericy
        19
    quericy  
       2015-01-14 21:14:17 +08:00
    复杂js计算限制用PC浏览器+flash cookie验证
    takatost
        20
    takatost  
       2015-01-14 21:43:53 +08:00
    浏览器指纹一般都是浏览器生成的,服务器无法校验正确性
    如何保证用户不篡改验证串?
    mengzhuo
        21
    mengzhuo  
       2015-01-15 08:27:01 +08:00 via iPhone
    @takatost 简单的说 就是不行
    imlewc
        22
    imlewc  
    OP
       2015-01-15 10:21:57 +08:00
    @loading
    @ETiV

    可以看下这个能不能投递
    http://www.mofang.com/zt/2014px/
    NeoAtlantis
        23
    NeoAtlantis  
       2015-01-15 11:06:02 +08:00
    用hashcash不错,简单说就是要求一个特定的字符串,其散列后前n比特都是0.

    这个字符串有特定要求的,比如既然是投票,字符串里面的资源名就要写你的ip、投票的内容和你的选项。还有生成日期,可以精确到分钟或者秒,以免过期的被重用。然后字符串结尾允许一些别的东西,用来产生满足要求的结果。

    比如这样一个例子:

    1:20:150115:vote-to-person1;219.150.32.132;v2ex.com::laZM06NobysDWlGk:0000000000000000000000AY/C
    (自己试下散列上面这个字符串看HEX结果)

    比如n=20的时候,根据生日问题能估计需要平均2^10次计算才能找到一个这样的字符串。这就保证能产生这个字符串的平均进行了~1000次的SHA1计算。提高n可以大大减缓刷票的可能。

    缺点是,越好的机器越容易刷,越烂的机器或者浏览器越难。而且js的SHA效率也不高。
    exceloo
        24
    exceloo  
       2015-01-15 11:07:03 +08:00
    只有@ETiV 这种方法是有效的。关键在于“统计结果的时候再处理刷票的;”
    如果一查到有人刷票就处理,你根本玩不过黑产。淘宝上1w个ip才2块钱...
    验证码人工打码也便宜的很;
    连手机验证码都有api,1毛接收1个。
    intosec
        25
    intosec  
       2015-01-15 13:27:18 +08:00 via Android
    那要是对面就是召集了一万多个人力,人肉投票,这种怎么破?
    br00k
        26
    br00k  
       2015-01-15 17:51:15 +08:00
    说到底只是增加刷票的成本而已。
    imlewc
        27
    imlewc  
    OP
       2015-01-15 17:52:21 +08:00
    @br00k 与人斗其乐无穷的赶脚
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2854 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 06:24 · PVG 14:24 · LAX 22:24 · JFK 01:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.