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

脚本高手进~~来为维基百科捐点钱

  •  
  •   vanvesee · 2015-09-23 14:39:59 +08:00 · 4928 次点击
    这是一个创建于 3330 天前的主题,其中的信息可能已经有所发展或是发生改变。

    老婆所在公司( 100offer )目前正在举办一个活动,投票就给维基百科捐款(上限 10 万),目前才 2 万多。

    我发现了一个漏洞:

    照理来说投票类功能会根据 IP 啊、访问间隔啊吧啦吧啦做一些限制的,但仁慈的攻城狮显然是为了能够给维基百科予以最大的支持,所以这个限制很弱鸡!!

    只要每次投票后刷新页面,就可以再次投票啦。

    9.23 更新: 需要增加图片验证码识别及计算模块

    害得我都想写个脚本来自动刷票了,当然为了不影响投票结果的公平性,我觉得应该遍历所有参赛作品并投票, Hia~Hia~Hia~


    他们公司的 CEO 都说了可以拿 10 万出来,我觉得可以替维基百科『笑纳』。

    PM 已到位,思路清晰,只差程序员了。
    有没有志同道合的小伙伴? 感兴趣请留言。

    附上活动页面: http://i.100offer.com/projects

    第 1 条附言  ·  2015-09-23 17:34:26 +08:00
    最初是当做娱乐来对待的,起因是从知乎看到如何给维基百科捐款的问题说起。
    不过 V2EX 上大家一溜的回复都认为是软文、水军... 我就稍微研究了下下。

    撇开活动内容不谈(原文已经无法编辑,部分人建议删除的内容恐怕实现不了),我只谈谈这几天的进展:

    9.21
    投票时发现可以重复投票,第一次投票不需要验证,第二次投票需要输入数字加减计算结果;
    另根据 @xfspace 提供的链接 t/222843 来看,提交逻辑可能也比较简单。

    9.22 也许官方发现了刷票太 Easy ,对投票逻辑进行变更:
    1 、第一次投票不变;
    2 、第二次投票通过 js 控制,必须通过表单提交;
    这点是导致脚本失效的原因。
    3 、提交成功后若不刷新页面,再次提交的话忽略处理。
    意味着刷新页面后可以再次投票。

    9.23 抽空研究了下前端逻辑,尝试捕获其它漏洞,发现出了个新措施:
    对于单一 IP 访问频次做了控制,导致频繁发起请求时返回 500 错误。
    有空再研究。

    (前几天没做过多技术研究,可能记得不太清楚)。
    第 2 条附言  ·  2015-09-24 17:42:03 +08:00

    看到被指责某些行为的不当,我承认这不是我的本意。
    最初只是以戏谑的口气来说这事。其实在最初了解到会以投票形式进行评选时,我就提出了防刷票机制的想法,如果换做我,我会怎么来做?再站到对立面,我会如何来破解?

    随后又想到了验证码 vs 验证码识别、 Spam vs Anti-spam 、爬虫 vs 反爬虫 以及 图灵测试...( AI 科幻题材的美剧看多了)
    这些技术的发展互为因果,就像每年度都会举办的黑客大会,有许多新奇技术、手法的碰撞,也许在这攻与防的过程中,技术才会有更大的进步。

    之前在公司负责账户安全模块的设计和开发,恰好是 CSDN 等 IT 网站爆出密码明文存储牵扯到用户账户安全的时候。当时做的安全措施异常复杂,已经影响到普通用户的操作了,有些做法至今还能在其它产品中找到影子:
    1 、强制定期更改密码(如一个月);
    2 、最新密码不能与最近使用过的 5 个密码相似;
    3 、密码必须包含特殊字符,且满足一定的排列要求
    ......
    直接导致我常用的几个密码在一段时间后无法再次使用,新设置的密码又记不得,重置一次又一次,已经抓狂了。

    技术不应该成为影响用户体验的障碍。
    看到阿里的云舒在知乎说,他们最近正在研究如何取消验证码,我觉得这是一件很有意义的事情。

    过犹不及,但凡事皆需有度。


    哥玩 Moto 360 去了,有空回聊。

    27 条回复    2015-09-24 11:13:15 +08:00
    wdd2007
        1
    wdd2007  
       2015-09-23 14:43:51 +08:00
    感觉是 100offer 自己发的帖子。。
    xfspace
        2
    xfspace  
       2015-09-23 14:45:15 +08:00 via Android
    昨天有人发了个脚本,然并卵被补上了。
    个人观点:写得一手好软广~
    shuax
        3
    shuax  
       2015-09-23 14:48:29 +08:00
    花式打广告
    vanvesee
        4
    vanvesee  
    OP
       2015-09-23 14:59:18 +08:00
    @xfspace 真不是软广。 求脚本链接。
    xfspace
        5
    xfspace  
       2015-09-23 15:08:18 +08:00 via Android
    @vanvesee t/222843
    FFLY
        6
    FFLY  
       2015-09-23 15:15:08 +08:00
    怎么看都像是营销软文
    zts1993
        7
    zts1993  
       2015-09-23 15:21:04 +08:00
    老婆所在公司( 100offer )。。。看到这句总觉得不对。
    mcone
        8
    mcone  
       2015-09-23 15:27:35 +08:00
    楼主先把公司名字去掉再说事儿吧 分明就是一次不成熟的营销
    x4
        9
    x4  
       2015-09-23 15:32:45 +08:00 via Android
    拿着 vc 的钱大把的挥霍。唉。。。。
    lincanbin
        10
    lincanbin  
       2015-09-23 16:07:12 +08:00
    vanvesee
        11
    vanvesee  
    OP
       2015-09-23 16:53:17 +08:00
    研究了一下逻辑。。

    var arr = $("label").text().match(/\d+/g);
    var sum = parseInt(arr[0]) + parseInt(arr[1]);
    $("#humanizer_answer").val(sum);
    $("form").submit();

    准备加定时,发现服务器 500 错误了。。。
    a342191555
        12
    a342191555  
       2015-09-23 16:55:20 +08:00
    $("div").each(function(index,element){if(element&&element.attributes&&element.attributes[1]&&element.attributes[1].value&&element.attributes[1].value==295){element.nextElementSibling.children[0].click();text=document.getElementsByClassName("vote-frame")[1].children[2].children[1].innerHTML;a=text.substr(0,text.indexOf("加"));b=text.substr(text.indexOf("加")+1,text.length-text.indexOf("等于")-2);document.getElementById("humanizer_answer").value=parseInt(a)+parseInt(b);document.getElementsByClassName("vote-frame")[1].children[2].children[4].click()}});

    难看死了…为啥 500 了…
    surfire91
        13
    surfire91  
       2015-09-23 17:06:20 +08:00
    验证码只有 XXX 加 XXX 等于多少?
    lerry
        14
    lerry  
       2015-09-23 17:25:08 +08:00
    不用那么麻烦好吗?浏览器的话,清下 cookie 就可以继续投票了,脚本就更随意了。
    vanvesee
        15
    vanvesee  
    OP
       2015-09-23 18:01:06 +08:00
    @lerry 来个随意的脚本实现? 给俺学习下。
    vanvesee
        16
    vanvesee  
    OP
       2015-09-23 18:02:40 +08:00
    @a342191555 你的那段代码哪来的... 我这边看是 jquery 写的。
    500 错误应该是针对 IP 访问做了控制,我换 IP 后正常。
    chairuosen
        17
    chairuosen  
       2015-09-23 18:05:27 +08:00
    正文头两个字就在花式虐狗
    a342191555
        18
    a342191555  
       2015-09-23 18:16:06 +08:00
    @vanvesee 自己写的。。很烂。。模拟点击的动作…
    逻辑:遍历所有的 div ,如果一个 div 的 attributes[1]的 value 是 295 (追气球的熊孩子那个,我最喜欢:),点击下面的投票按扭,然后分析问题,把问题中的两个数提取出来相加,放到 humanizer_answer 里面去,最后模拟提交动作。。。
    赞你的高效脚本:)
    碎碎念,略:没学过 jQuery ,本科毕设时做过前端,对 JS 知道一点皮毛…
    lerry
        19
    lerry  
       2015-09-23 19:00:04 +08:00
    @vanvesee ip 限制的话只能上代理了
    xiaocui
        20
    xiaocui  
       2015-09-23 19:03:18 +08:00
    说了多少遍了 维基百科 不 ! 缺 ! 钱 !
    terence4444
        21
    terence4444  
       2015-09-23 19:15:31 +08:00 via iPhone
    最后捐不捐还不知道呢,又没有证据。
    leoss
        22
    leoss  
       2015-09-23 19:28:08 +08:00
    一个靠捐款维持正常运作的网站,没有不缺钱这个说法。
    vitovan
        23
    vitovan  
       2015-09-23 19:32:11 +08:00 via Android
    500miles
        24
    500miles  
       2015-09-23 20:18:05 +08:00
    10 万块引来一群人(最直接的目标客户)关注, 最关键是还能这群人不亦乐乎, 参与其中,,,,,

    这群人不断有人 show 脚本, 你们不断的家访, 你猛攻我受受 岂不爽哉?

    这广告创意谁想出来的? 太尼玛机智了...
    msg7086
        25
    msg7086  
       2015-09-24 01:39:34 +08:00
    顺便提一句。
    利用漏洞让企业给维基多捐钱的行为应该是违法的。不知道算不算的上盗窃,不过性质是一样的。
    SergioChan
        26
    SergioChan  
       2015-09-24 09:29:38 +08:00
    @msg7086 并且写脚本刷票还叫开源项目的评选么= =这不是脚本评选么
    xiaobetty
        27
    xiaobetty  
       2015-09-24 11:13:15 +08:00
    @terence4444 我们会将捐款截图、维基百科收到款项后的回复邮件公示出来
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1123 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:39 · PVG 02:39 · LAX 10:39 · JFK 13:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.