关于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,如需转载请自行联系原作者


相关文章
|
9月前
|
存储 资源调度 Java
计算机基础(1)——计算机体系结构和组成
计算机(computer)俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能。是能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。 在过去的几十年里,计算机科学经历了令人瞩目的飞速发展。经历了电子管、晶体管、集成电路的世代发展,体积越来越小、性能越来越强,为人类带来了巨大的便利和变革,下面我们来回顾计算机的发展历程。
2797 2
计算机基础(1)——计算机体系结构和组成
|
存储 内存技术
内存条RAM详细指南
内存条(RAM)是电脑中用于临时存储数据和程序的部件,CPU依赖它执行操作。内存条经历了从主内存扩展到读写内存整体的发展,常见类型包括SDRAM和DDR SDRAM。内存容量、存取时间和奇偶校验是衡量其性能的关键指标。在选购时,应考虑类型、容量、速度和品牌,知名品牌的内存条提供更好的可靠性和稳定性。
3974 2
|
Prometheus 监控 Cloud Native
如何优化Java应用的内存使用
如何优化Java应用的内存使用
|
8月前
|
监控 关系型数据库 MySQL
MySQL和SQLSugar百万条数据查询分页优化
在面对百万条数据的查询时,优化MySQL和SQLSugar的分页性能是非常重要的。通过合理使用索引、调整查询语句、使用缓存以及采用高效的分页策略,可以显著提高查询效率。本文介绍的技巧和方法,可以为开发人员在数据处理和查询优化中提供有效的指导,提升系统的性能和用户体验。掌握这些技巧后,您可以在处理海量数据时更加游刃有余。
783 9
|
6月前
|
存储 弹性计算 数据管理
阿里云对象存储OSS收费标准:500G存储118元1年、
阿里云对象存储OSS 2025年收费标准涵盖存储、流量及请求等费用,支持按量付费与包年包月两种模式。标准型存储按量价格为0.09元/GB/月,包年包月如9元享40GB体验价。流量费仅收取公网出方向,忙时0.50元/GB,闲时0.25元/GB。此外提供多种存储类型(低频、归档等)及流量包优惠方案,未使用功能不收费。详情见阿里云OSS官网。
5657 6
|
JSON 小程序 JavaScript
微信小程序制作 购物商城首页 【内包含源码】
这篇文章提供了一个微信小程序购物商城首页的实现方法和源码,包括页面布局、数据结构、核心代码以及如何配置tabBar和搜索框组件。
微信小程序制作 购物商城首页 【内包含源码】
|
SQL 存储 数据挖掘
SQL数据:挖掘、管理与应用的深度探索
在数据驱动的时代, SQL作为数据库管理和查询的基石至关重要。本文探讨了SQL数据的挖掘、管理与应用。数据挖掘包括数据查询、聚合与关联,帮助发现数据模式和趋势以支持决策。数据管理确保数据的完整性、一致性和可用性,涉及存储、检索、更新和维护。而数据的应用则能推动业务发展、优化运营、提升客户体验和促进创新。通过高效利用SQL,企业可以最大化其数据资产的价值并在竞争中脱颖而出。
255 0
|
Linux 文件存储 数据安全/隐私保护
linux检查用户是否创建成功
在Linux中检查新用户是否创建可以通过多种方式:1) 查看`/etc/passwd`文件,使用`grep`找寻用户名;2) 使用`id`命令显示用户ID和组信息;3) 检查`/home/username`主目录是否存在;4) (可选) 查看`/etc/shadow`文件中的用户信息,但这可能需要root权限。非特权用户可使用`id`命令和检查主目录。
596 4
|
测试技术
你真的知道什么是冒烟测试吗?
你真的知道什么是冒烟测试吗?
721 0
你真的知道什么是冒烟测试吗?
|
Linux 开发者 Python
探索PySimpleGUI:一款简洁易用的图形用户界面库
探索PySimpleGUI:一款简洁易用的图形用户界面库
1247 0
探索PySimpleGUI:一款简洁易用的图形用户界面库