這是一個真實的事,一家比較大的公司舉辦的一個全國性的投票,然而,頁面確實寫得很爛,做假太容易。
首先,找到投票按鈕的源代碼:
這個”tp”類就是投票事件的定位關鍵字。
然後,打開source下的源文件,搜索“.tp”:
可以看到,這就是投票事件的代碼
分析源代碼
//投票
jq('#scrollText_01>ul li .tp').click(function () {
//判斷是否對此人投票
var index = jq(this).parent().index();
var id = index + 1;
if(jq.cookie('chenyi_'+id)){
alert('您已經投票,不可重複!');
}else{
var num = jq("#"+index).html();
//點贊
jq.getJSON(rootPath + "dztr/index.php?_c=dztr&_a=prized&callback=?", {"id": id,"num": num}, function (json) {
var data = eval(json);
var vote_num = data.prized_num;
if (data.msg == 'no') {
vote_num = num;
alert('投票失敗,請重新投!');
}else{
jq.cookie('chenyi_'+id, 1, { expires: 365 });
}
jq('#' + index).text("" + vote_num + "");
});
}
});
很明顯,它是通過cookie來判斷用戶的。
那不看代碼,怎麼猜測一個投票網站是通過哪種方式識別用戶呢?
可以在一個瀏覽器投一次票,然後再換一個瀏覽器偷,如果能投,說明是通過cookie來判斷用戶的。如果不能,那就可能是通過ip來限制的。
通過cookie來限制的,可以刪除cookie來繞過,直接在瀏覽器的開發工具的就可以找到和刪除。但是,這種方法每投一次票就要刪除一次cookie.如果剛巧這個網站又用了js來驗證cookie,那麼我們就可以修改驗證的代碼來繞過。我們知道html是事件驅動的,那麼就可以從事件綁定代碼入手,進行修改。
上面的網站就是犯了:1、不用登錄,使用cookie識別用戶投票狀態 2、使用js驗證cookie 兩個大忌
通過分析,現將投票事件解綁:
jq('#scrollText_01>ul li .tp').off()
再重新綁定事件,把驗證cookie的代碼刪去即可:
jq('#scrollText_01>ul li .tp').click(function () {
//判斷是否對此人投票
var index = jq(this).parent().index();
var id = index + 1;
// 只需修改這裏
if(false){
alert('您已經投票,不可重複!');
}else{
var num = jq("#"+index).html();
//點贊
jq.getJSON(rootPath + "dztr/index.php?_c=dztr&_a=prized&callback=?", {"id": id,"num": num}, function (json) {
var data = eval(json);
var vote_num = data.prized_num;
if (data.msg == 'no') {
vote_num = num;
alert('投票失敗,請重新投!');
}else{
jq.cookie('chenyi_'+id, 1, { expires: 365 });
}
jq('#' + index).text("" + vote_num + "");
});
}
});
然後就可以一直點擊投票,再也不會被限制了。