关于Cookies——令你感到意外的罪魁祸首

简介:

     在51CTO传媒推出“2011年IT博客大赛”后,我也很“关注”,继而也尝试着参加了。

        其实我写blog是为了让别人得到一定的技术支持,同时也提高自己的写作水平和学习的扎实度。看了一下“2011年IT博客大赛”的首页和选手的参赛网址,发现有各个选手的blog连接,感觉这是个宣传自己的好机会。怎样达到良好的宣传效果呢?当然是增加投票数目和提升排名了!

 

    因为自己所学专业方面的优势,很快就发现了投票系统的一个漏洞bug。

    首先,我认真阅读了“2011年IT博客大赛”的章程,发现如下内容:

IT博客大赛十大杰出IT博客及IT博客50强评选规则: 
1、网络投票规则 
1)投票用户无需注册; 
2)每位网友每天限投10票,当天不能重复投给同一参赛者;

        既然是游客可以投票,那么肯定可以有所利用。所以我就进行了投票测试,退出了当前登陆。果然如规则所描述的,游客是可以投票的。但是如何能得到更多的投票机会呢?

我猜测这个是网页的脚本设计出的功能,因此首先我查看了此网页的源代码。

摘录如下:

<!--这是来自http://blog.51cto.com/contest2011/1539422的页面源代

<li><a href="javascript:void(0);" class="vote" rel="1539422">
<img src="http://blog.51cto.com/contest2011/images/gr_tp.jpg" width="98" height="34" /></a></li>

认真查看了第二行的脚本文件。 摘录其中的投票部分如下: 

function votesubmit(v,m,f){
    if (v == 'yes') {
        an = m.children('#seccode');
        if(f.bseccode == ""){
            alert('请输入验证码!');
            return false;
        }
        $.post(baseurl + "/index.php?mod=vote", {bseccode:f.bseccode,vuid: f.vuid}, function(data){
            if (data.status == 1) {
                alert('投票成功');
//                $('#vote'+f.vuid).html(data.data + ' 票');
                $('.votenum'+f.vuid).html(data.data);
            } else if (data.status == '-4') {
                alert('验证码错误!');
                return false;
            } else if (data.status == '-5') {
                alert('投票有异常哦,不符合投票规定吧?');
            } else if (data.status == '0') {
                alert('投票失败,请稍候再试!');
            } else {
                alert(data);
            }
            $.prompt.close();
        }, 'json');
        return false;
    } else if (v == 'no') {
        return true;
    }
}
虽然我对java脚本和PHP语言并不熟悉,但我还是找到了我感兴趣的敏感词汇,“vuid”、“centent”等。 
因为这些我在以前学习操作系统接触web服务器时在cookies的相关内容中似乎见到过类似的内容。因为cookies的一大功能就是记录客户端的信息(稍后我会对Cookies进行一些描述)。 
感兴趣的话,可以打开cookies或者借助浏览器查看cookies的内容,我敢保证你肯定会骂cookies的(你骂cookies好了,因为就算是网络程序员也没有办法),后面将继续介绍。 
紧接着,我又查看了第三行对应的脚本内容,发现如下内容:
/*
 * jQuery Impromptu
 * By: Trent Richardson [http://trentrichardson.com]
 * Version 3.1
 * Last Modified: 3/30/2010
 * 
 * Copyright 2010 Trent Richardson
 * Dual licensed under the MIT and GPL licenses.
 * http://trentrichardson.com/Impromptu/GPL-LICENSE.txt
 * http://trentrichardson.com/Impromptu/MIT-LICENSE.txt
 * 
 */
这个看起来似乎是一套“软件”,更确切地说应该是套插件,我按照联系方式去查看了一下相关的网页, 发现了与计(数)时器功能类似的词语,如datetime和timerpicker这样的词语。
这样更加证实了我以上的想法。 因此我进行假设,如果满足以下条件则投票系统必然不会以为这是个false投票。 1.变更IP地址。这个恐怕死任何一个人都可能想到的,因为IP这个独特的机制肯定会被绝大多数web投票系统所利用。 一般来说,投票系统会在一段时间内把投票过的IP地址交付给数据库存放,当再次有投票请求时就会核对是否是以往投过票的IP。 2.当前cookies并没有记录。因为我后来想到cookies这个可恶的死虫子可能记录下与我有关的信息,所以我后来才使用清除cookies的方法。

后来我也被证实这种方法的必要性。

补充:

Cookies的作用 | 如何禁用cookies | 如何清除cookies请参阅维基百科

3.考虑网卡信息和浏览器的特征性信息。 针对IP地址,我首先想到了DHCP服务器。这个其实我已经在我的一篇博客文章中提到过了,详情参见我的文章,名称是《 关于DHCP——一些你可能不知道的东西 》。 使用路由器,断开WAN口连接,再进行连接的这个方法是最简单、最凑效的。 image  注意这里有个要点:IP必须是公网IP地址,私有IP地址无论如何改变都是不能做到以上的需求的。 
不过,这个方法有种弊端,那就是可能导致你使用的IP地址只是在一个固定的范围内跳动,如在一个子网内。 所以,不妨使用IP代理的方法,可以非常有效的“伪装”IP地址。 
针对cookies,我首先并没有拒绝我的浏览器允许使用它,而是试着清除掉所有包含“51cto”字符的cookies记录。 image 
如果完全禁用cookies恐怕,就会得到最好的效果。因为,你不知道管理员是否会把记录cookies的关键字改掉,改为google、microsoft或者cisco你就不知道了。  image
像这样的cookies你是不是感到很愤怒呢? 
针对第三种,我考虑了半天,虽然有效,但是不太可行。后来我觉得我有必要利用我借助Oracle VM搭建的虚拟机。 虽然也凑效,但是由于IP地址的特性还是需要借助路由器实现IP的变更。 其实,要想做到这一点还可以借助一些专门的软件,比如借助第三方投票软件。 但是这个方法我没有使用,因为这几乎太难了,无论是获得它还是使用它。甚至它能给我带来危险。

 

 

最后在此特别声明:

51CTO IT博客大赛声明第一条“严禁任何恶意作弊行为,发现可疑情况组委会将组织调查,一经证实该选手将被取消参赛资格。”组委会将不定期进行检查和处理。

本文章仅仅用于报告bug,请自觉做到不要使用其中的内容应用到任何投票系统。

如果你发现存在其他bug,请告知51CTO网络管理员,电子邮件为:shaoyan@51cto.com




本文转自 urey_pp 51CTO博客,原文链接:http://blog.51cto.com/dgd2010/717410,如需转载请自行联系原作者


相关文章
|
芯片
程序人生 - 手上总有静电该怎么处理?
程序人生 - 手上总有静电该怎么处理?
110 0
程序人生 - 手上总有静电该怎么处理?
|
安全 Windows
Win系统 - 更新后,竟有这么“严重”的后果?
Win系统 - 更新后,竟有这么“严重”的后果?
114 0
Win系统 - 更新后,竟有这么“严重”的后果?
|
程序员 Android开发
996:只要能活着就好,不管活得多么糟糕
划重点: 996 是指每天早上 9 点上班,晚上 9 点下班,每周上 6 天班 至于剩下的那天能不能休息,全靠天意 没有家,即使有,也只是个补充睡眠的窝 01、 最近,我这个程序员所在的圈子里发生了一件天大的事。
|
SQL 关系型数据库 Oracle