Home | 简体中文 | 繁体中文 | 杂文 | 打赏(Donations) | ITEYE 博客 | OSChina 博客 | Facebook | Linkedin | 知乎专栏 | Search | Email

15.7. 防止恶意刷新与重复提交

在开发中会经常会遇到这样的需求,例如投票模块,要防止恶意刷票,下面来介绍几种解决方按:

1、来源IP / MAC地址限制
      这个是使用最多也是最广泛的方式,通过获取访问用户的来源IP地址,来限制在一段时间内所能使用的票数。
经常用电脑的老手是很容易绕出这种限制的。PPP/PPPoE拨号用户,可以通过断线重拨来更换IP地址;
 		每个网络位置会有一个全球唯一的MAC位址。所以我们也可以根据MAC地址限制用户访问

2、Cookies / Session验证
      这种方式用的也比较多,清除浏览器Cookies,就可以很容易的绕过这种限制了
	  关闭浏览器,Session就会被销毁;客户端禁用Cookie,Session也会失效;

4、验证码,包括图像,语音,电话,邮件以及回答问题
	首先说图片验证码,有些变态的网站,大家可以看到用户的注册、登录、回复、发帖等等,都会使用验证码,但是这种方式会让用户有时感觉很恶心,随着OCR(Optical Character Recognition,光学字符识别)技术的成熟,图片验证码已经不再安全,识别率可能达到90%以上甚至100%
	语音有播放方式和电话方式,听喇叭中读取字符,然后输入验证码。不要以为这是最安全的,语音是一种波形,通过DSP(Digital Signal Processing,数字信号处理)技术很容易识别
	手机短信与电子邮件,不多说了

	回答问题
	如果没有足够海量的题库,很快问题的内容和答案就会被收集。反而让正常投票的用户,觉得投票很恶心、麻烦,产生厌恶心理。渐渐的也被我们抛弃了。


5、注册用户可能投票模块
	游客不能参与,必须注册了账户才能进行投票,并且限制新注册用户,在一段时间内不能参与投票。

6、随机投票地址
	让每一个访问页面的用户得到一个随机唯一的KEY可能通过UUID/GUID生成,通过这个KEY,生成一个投票地址,该地址只能访问一次,使用过后便作废。

总结:很快就会有新的应对方式。我们只能通过上面几种方案的组合方式,增加用户刷新难度,让用户在无法在短期内实现应对方案,你没想出一种新方式。