16.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,生成一个投票地址,该地址只能访问一次,使用过后便作废。

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

原文出处:Netkiller 系列 手札
本文作者:陈景峯
转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。

时间: 2024-10-30 10:29:45

16.7. 防止恶意刷新与重复提交的相关文章

php防止刷新页面重复提交

作为phper,我们在开发和学习php过程中,难免要经常的接受处理表单数据,然而处理表单的时候总会有一个问题,困扰大家,刷新页面重复提交的问题.如何防止刷新页面重复提交呢? 其实在php学习中我们会有很多的方法,比如最简单的,我们可以采用,提交成功后,进行跳转的方法.但是这样做,有时候,会有很多瓶颈,比如,如果我们的页面有很多内容需要加载,尤其是很多跟后台打交道,这样如果跳转重新加载页面的话,可能会对服务器造成压力. 这里我们可以采用另外一种方法,来防止刷新页面重复提交,以便大家更好的学习php

用struts2 token防止刷新页面重复提交什么让服务器跳转到当前页面?里面的数据不变的

问题描述 用struts2 token防止刷新页面重复提交.是跳转到一个提示错误页面,怎么能跳转到第一次不刷新时的页面.参数值都带过去 解决方案 你可以在提示页面里使用jsWindow.location今天跳转到原来的页面,并且把参数跟在url的后面

asp.net 处理F5刷新页面重复提交页面的一个思路_实用技巧

当提交完一个页面后,如果我们再次点击F5刷新该页面的话,会弹出一个提示,提示我们如果继续,则会重新发送提交我们刚才提交的内容,要是类似付款或一次性的操作,我们不应该这样操作,否则会造成重复提交的问题.解决这个问题,我们可以通过如下思路来处理: 1. 提交成功后,将一个成功状态存入session中,然后重新载入该页面. 2. 在page_load方法中,判定该session字段的状态值,如果为成功,则显示成功信息,否则显示错误提示,紧跟着通过Session.Remove()方法来清空该缓存即可.

寻求提交不刷新方法F5刷新不重复提交ASPX

问题描述 用ASP.NET做个一个提交一直会出现页面刷新和F5重复提交寻求好方法解决防止右击,和屏蔽F5键 解决方案 解决方案二:提交后禁用按钮,解决方案三:http://blog.csdn.net/firewolffeng/article/details/1933694解决方案四:用ajaxControl控件...把整个from包起来...提交一次后按F5不重复提交也没有那个重复提交的提示我这么用的,你也试试吧.解决方案五:可以用hidden和session做一个同步标识,初始化hidden和

防止php表单提交刷新自动重复提交

js 阻止重复提交 第一个是将告诉浏览器禁用submit按钮的表单被提交之后,第二个是将更改按钮的文本来给用户一些知道发生了什么.这是代码添加到你的表单标记:onsubmit="document.getElementById('myButton').disabled=true;document.getElementById('myButton').value='Submitting, please wait...';"你的表单标记将类似于:  或jquery做法 $(document)

asp.net防止刷新时重复提交(可禁用工具条刷新按钮)_实用技巧

前段时间遇到了需要禁用刷新的需求,f5按钮就不说了,简单的js就能把它禁用,但是工具条上的刷新按钮却傻傻干不掉. 如果简单的在刷新时重新加载画面,通过window.location.href="url"可以很容易的实现,但是需求是要求在刷新时什么都不做,保留画面的状态,这下子可就复杂化了. asp.net中分辨请求是重新请求还是通过刷新按钮再次请求不是很方便,为了实现这个效果,试过了很多的方式,一下面的两种为例 1. 复制代码 代码如下: private bool pageRefres

ASP.NET 后退问题 .net 防止刷新 后退重复提交

原文 http://www.cnblogs.com/super-cj/archive/2012/11/07/2758472.html 让网页"立即过时"有时候是一个很有用的功能,比如防止用户使用后退来破坏程序逻辑:程序主动刷新某个页面等等.在ASP中最有效的方法是: Response.CacheControl = "no-cache" 就这么一句足矣,Response.Expires=-1之类的其实都不需要,也不符合我们的要求. 但到了ASP.Net的时代,当我还糊

PHP防止刷新重复提交页面的示例代码_php实例

PHP防止刷新重复提交页面的示例代码 作为phper,我们在开发和学习php过程中,难免要经常的接受处理表单数据,然而处理表单的时候总会有一个问题,困扰大家,刷新页面重复提交的问题.如何防止刷新页面重复提交呢? PHP防止刷新重复提交,通过不断刷新(Refresh or Reload)表单提交页面,可以重复提交表单内容,可以利用 PHP 的 Session 来避免这一点,Session 保存在服务器端,在 PHP 过程中改变 Session 变量的值后,即保存在服务器端,下次访问这个变量时,得到

解决jsp重复提交

 有几种方法: 1 在你的表单页里HEAD区加入这段代码: <META HTTP-EQUIV="pragma" CONTENT="no-cache"> <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate"> <META HTTP-EQUIV="expires" CONTENT="Wed