[原创]打倒投票作弊,巧用flex防刷票

[文章作者:陈臻 本文版本:v1.2 最后修改:2009.4.28 转载请注明原文链接:http://www.54chen.com/c/520 ]

在开放ID投票的应用中,如果投票后的奖品丰富,必然会招来各种各样的刷票机和人肉刷票,如何防止刷票,也就成了大家头疼的事情。

一般情况下,大家都会使用限制IP的策略,同时加上Cookies,但是日常都刷票机都能解决掉这两种方法,下面介绍的是一种比较少用一些的方法,就是利用flash的share object机制来防止刷票,这只能增加刷票的成本,而不能完全规避这种行为,要做到没人刷票而又开放,基本上只能靠--人。

下面请看flex代码,内附注释(xx.mxml):

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="init()" applicationComplete="onBrowseClick()" width="190" height="54" horizontalAlign="center" verticalAlign="middle" alpha="0.44" backgroundGradientAlphas="[0.0, 0.0]" backgroundGradientColors="[#ffffff, #ffffff]">
<mx:Script>
<![CDATA[
import flash.external.*;
import com.cc.StringManipulator;
import com.cc.Md5;
import mx.controls.Alert;
[Bindable]
public var myTime:String;
[Bindable]
public var myUid:String;
[Bindable]
public var myHash:String;

private function init():void{//初始化 通过下面三个html传过来的参数进行下一步的计算
myTime = Application.application.parameters.t;
myUid = Application.application.parameters.u;
myHash = Application.application.parameters.h;
} private function onBrowseClick():void{
var hk123:SharedObject = SharedObject.getLocal( "hk123" );
var temp:String = hk123.data[myUid];
var hashCode2:String = '';
hk123.data[myUid]=myTime;
hk123.data.dt = myTime;
hk123.flush();
hashCode2 = Md5.calculate('caoninengdudaozelizhenxian' + myUid + myHash);//这一行自己加了个密钥串和传来的用户ID和服务器串进行md5 如果能破解flash到这里 这个基本上就破了 ExternalInterface.call("browse",temp,hashCode2);//提交到html里的js function->browse,通过这个js把form提交给服务器端,去计算整个串是不是对的或者是不是使用过的,也就可以限制重复了
} ]]>
</mx:Script>
</mx:Application>

  PS:

有许多朋友来mail问我js部分,特地加一下,其实就是一个简单的function,里面怎么写都行,只要把参数传到服务器端就成:

 

大致如下
function browse(a,b)
{
form.action += '&s1=a&s2=b';
form.submit();//其实用ajax传也不失为一个好办法
} 这就把一个form提出去了,你当然还可以用ajax什么的直接发那两个值去服务器端就是了。
END


原创文章如转载,请注明:转载自五四陈科学院[http://www.54chen.com]

捐款订阅54chen
捐赠说明

Comments