最近学校导航站找我让我给他们做一个投票系统的网站,我一口答应了,他们只是要求不准刷票情况出现,我也一口答应了。。我答应的太干脆了。

  然后我便开始做这个网站,网站做出来没花太多时间,并且我是用IP来判断是否投过票,现在想起来,IP,唉,,,痛啊啊啊啊啊。

  投票的前一天,我给导航站的看网站,他们觉得可以,并且希望只能用学校内网投票,然后又改,还好服务器是在学校里面的,内网的IP可以直接访问的,在IP处理这一方面直接用的是正则表达式,只允许172.16.0.0到172.32.255.255的IP投票,然后我天真的以为这样就可以防止刷票了。

  投票的第一天,很多队伍都很为内网投票很头疼,我告诉了他们可以用VPN连到校内网进行投票。我虽然是这么一说了,但是万万没有想到,每连一次VPN,IP就换一次,意思说刷票情况又出现了。为了防止这一情况,我设置了cookie,保存当前用户投票的队伍,若是刷票的话,下一票肯定还是这个队,所以我就这么做了,同时我还设置了验证码。我再次天真的以为刷票风云就可以这么结束了,可万万没想到厉害的还在后面,先上一张图:

  我呵呵勒个呵呵,在跟我开玩笑吗?百度一下一大片一大片的软件,自动更换IP,自动输入验证码,啊啊啊啊啊啊啊啊,我当场就哭了,哭的相当的惨呀,惨不忍睹呀,弄了老半天就这么给破了,不甘心呀。

  我没有办法了,我之后弄邮箱验证了。以前没有写过邮箱这一块的程序,在网上看了下实现方法,当然我很担心,如果发邮件的话会不会被比如说腾讯邮箱拦截下来之类的呀,表示也很蛋疼,便在网上直接找到了个类,将这个邮箱类看懂之后直接拿来用了。有个域名,是freestu.net,并且这学期开学之后去弄了腾讯的企业邮箱,觉得相当爽,以自己的域名来做邮箱,好霸气高端上档次。看懂类之后直接拿来实例化用了,现在网站是集合IP,cookie,验证码,邮箱验证四大功能防刷票。

  已经不会再爱了,在群里面我被骂惨了,越整越难投票了。不爱了。

  我再讲讲每个方法的实现吧。

  IP,用到的是一个函数:

getenv("REMOTE_ADDR")

  cookie是用的函数:

setcookie("ip",$ip,$time);
setcookie("vote_id",$tb_vote_id,$time);//设置cookie,到时候可以判断VPN之后还是投这个队的话就投不起

  cookie的检查:

$_COOKIE['vote_id']==$tb_vote_id

  验证码是以前写的一个类,直接拿来用了,主要就是随机生成一个4位数,包括A-Z,a-z和0-9,验证的时候区分大小写,然后存在session里面。

  发邮箱的类:

class.phpmailer.php

  邮箱发送的内容也是随机一个10位的包括大写小写数字的验证码,发过去然后邮箱获得后可以直接复制,同时这个验证码存入cookie里面,这里存session也可以的,然后让用户输入验证码,判断这个邮箱的验证码与cookie或者session中的是否一样。

  投票还没有结束,但是起码我看见了成效,没有再刷票了。yeah~~~~

转载请注明出处:http://www.cnblogs.com/yydcdut/p/3470105.html

关于PHP写的投票网站之刷票风云的更多相关文章

  1. 关于PHP写的投票网站之刷票终结版

    告诉大家一个坏消息,还是有刷票的行为,有图有真相: 倒数第三项是时间轴,倒数第二项是IP,倒数第一项是邮箱,你们要刷票,拦都拦不住呀呀呀呀呀呀!!!!! 看看这些时间的间隔,看看这些IP的地址,哎,再 ...

  2. 利用django创建一个投票网站(五)

    创建你的第一个 Django 项目, 第五部分 这一篇从第四部分(en)结尾的地方继续讲起.我们在前几章成功的构建了一个在线投票应用,在这一部分里我们将其创建一些自动化测试. 自动化测试简介 自动化测 ...

  3. 利用django创建一个投票网站(二)

    创建你的第一个 Django 项目, 第二部分 这一篇从第一部分(zh)结尾的地方继续讲起.本节我们将继续写 Web 投票应用,并主要关注 Django 提供的自动生成的管理页面(admin site ...

  4. 利用django创建一个投票网站(一)

    这是教程的原始链接:http://django-intro-zh.readthedocs.io/zh_CN/latest/part1/ 创建你的第一个 Django 项目, 第一部分 来跟着实际项目学 ...

  5. IIS写权限漏洞和XFF刷票原理

    IIS写权限漏洞 PUT写入漏洞 此漏洞主要是因为服务器开启了webdav的组件导致的 1.扫描漏洞,yes,可以PUT: 2.用老兵的工具上传一句话文件test.txt,然后move改名为shell ...

  6. redis 实例2 构建文章投票网站后端

    redis 实例2 构建文章投票网站后端   1.限制条件 一.如果网站获得200张支持票,那么这篇文章被设置成有趣的文章 二.如果网站发布的文章中有一定数量被认定为有趣的文章,那么这些文章需要被设置 ...

  7. 利用django创建一个投票网站(三)

    创建你的第一个 Django 项目, 第三部分 这一篇从第二部分(zh)结尾的地方继续讲起.我们将继续编写投票应用,并且聚焦于如何创建公用界面--也被称为"视图". 设计哲学 Dj ...

  8. PHP教程-防止网站被刷票的小技巧

    在Web开发中,投票模块会经常出现.这样就使得防止刷票,成了至关重要的技术.以下是兄弟连教育www.itxdl.cn总结的一些防止刷票方法: 1. IP限制 这是使用的最多,也是最广泛,不可少的刷票限 ...

  9. 利用django创建一个投票网站(四)

    创建你的第一个 Django 项目, 第四部分 这一篇从第三部分(zh)结尾的地方继续讲起.我们将继续编写投票应用,专注于简单的表单处理并且精简我们的代码. 编写一个简单的表单 让我们更新一下在上一个 ...

随机推荐

  1. 说一说Servlet的生命周期

    servlet有良好的生存期的定义,包括加载和实例化.初始化.处理请求以及服务结束.这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达. Se ...

  2. iOS 9应用开发教程之iOS 9新特性

    iOS 9应用开发教程之iOS 9新特性 iOS 9开发概述 iOS 9是目前苹果公司用于苹果手机和苹果平板电脑的最新的操作系统.该操作系统于2015年6月8号(美国时间)被发布.本章将主要讲解iOS ...

  3. C语言初始化

    注意:为什么要进行C语言环境的初始化?在没有进行C语言环境的初始化之前的初始化工作都是用汇编进行初始化的.比如核心初始化,和内存初始化 栈:栈帧:一个进程中一般会有多个函数,每一个函数都需要在内存中开 ...

  4. cbv

  5. Django Q对象

    使用Q 对象进行复杂的查询¶ filter() 等方法中的关键字参数查询都是一起进行“AND” 的. 如果你需要执行更复杂的查询(例如OR 语句),你可以使用Q 对象. Q 对象 (django.db ...

  6. [WC2018]州区划分(状压DP+FWT/FMT)

    很裸的子集反演模板题,套上一些莫名其妙的外衣. 先预处理每个集合是否合法,再作显然的状压DP.然后发现可以写成子集反演的形式,直接套模板即可. 子集反演可以看这里. 子集反演的过程就是多设一维代表集合 ...

  7. LuoguP5017 摆渡车 $dp$

    题意 戳这里 吐槽 听同学说今年\(pjT3\)很难,于是就去看了下. 一眼斜率优化...为什么\(n,m\)这么小啊... 感觉这题出的还是不错的. Solution 首先我们先转化一波题意:给出数 ...

  8. 【递推】Codeforces Round #483 (Div. 2) [Thanks, Botan Investments and Victor Shaburov!] D. XOR-pyramid

    题意:定义,对于a数组的一个子区间[l,r],f[l,r]定义为对该子区间执行f操作的值.显然,有f[l,r]=f[l,r-1] xor f[l+1,r].又定义ans[l,r]为满足l<=i& ...

  9. 【差分约束系统/DFS版SPFA】BZOJ3436-小K的农场

    [题目大意] 总共n个农场,有以下三种描述:农场a比农场b至少多种植了c个单位的作物,农场a比农场b至多多种植了c个单位的作物,农场a与农场b种植的作物数一样多.问是否有可能性. [思路] 农场a比农 ...

  10. 【HDU】3401:Trade【单调队列优化DP】

    Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...