所以我制作这个cracker / bruteforce只是为了学习/测试nuthin非法,因为我是通过localhost和我自己的php登录来做的。
所以我一直在变得失败:未定义:未定义
当它假设为失败时:user:pass
任何帮助?
由于
<script>
function crack() {
var cracked_area = document.getElementById("cracked_acc");
var failed_area = document.getElementById("failed_acc");
var num_users = 0;
var num_cracked = 0;
var html_next;
var user_l = document.getElementById("users");
var pass_l = document.getElementById("pass");
if (user_l.value == "") {
alert("The username field cant be empty!")
} else if (pass_l.value == "") {
alert("The password field cant be empty!")
}
var message = document.getElementById('message');
var user_l_s = user_l.value.split("\n");
var pass_l_s = pass_l.value.split("\n");
for (var i = 0; i < user_l_s.length; i++) {
num_users++;
for (var j = 0; j < pass_l_s.length; j++) {
$.ajax({
url: 'php/postdata.php',
type: 'GET',
data: {'user': user_l_s[i], 'pass': pass_l_s[j]},
dataType: 'text',
success: function (response) {
html_next = response;
if (html_next.indexOf("Failed") > -1) {
failed_area.value += 'Failed:' + user_l_s[i] + ':' + pass_l_s[j] + '\n';
} else if (html_next.indexOf("Cracked") > -1) {
num_cracked++;
cracked_area.value += 'Cracked:' + user_l_s[i] + ':' + pass_l_s[j] + '\n';
}
},
beforeSend: function () {
message.innerHTML = "Loading results...";
}
});
}
message.innerHTML = "Total Accounts Cracked:" + num_cracked + "/" + num_users;
}
}
答案 0 :(得分:0)
在success
- 回调中,您引用变量i
。
但想想当for循环运行时会发生什么。调用回调时循环已经完成,这就是为什么i
等于pass_l_s.length
,因此user_l_s[i]
未定义。
如果您想在回调中使用变量i
,则必须使用本地i
success: (function(i){
return function (response) {
html_next = response;
if (html_next.indexOf("Failed") > -1) {
failed_area.value += 'Failed:' + user_l_s[i] + ':' + pass_l_s[j] + '\n';
} else if (html_next.indexOf("Cracked") > -1) {
num_cracked++;
cracked_area.value += 'Cracked:' + user_l_s[i] + ':' + pass_l_s[j] + '\n';
}
}
})(i)
我们在这里定义了一个自调用函数,它需要参数i
。当for循环现在循环遍历所有i
时,每次从自调用函数返回一个新函数,该函数现在可以访问i
,导致其本地定义为自调用函数的参数。 / p>
相关提示
Javascript1.7引入了一个新的关键字let
,正是出于这个目的。但是在这些日子里它不能用于生产
答案 1 :(得分:0)
那是因为你在循环中调用了ajax()
函数。它是在循环语句中进行的异步调用,当响应返回到客户端时,循环已经结束,因此user_l_s[i]
将是未定义的。更改响应格式以返回哪个用户无法登录。