如何避免 javascript 中的内存不足错误
How to avoid full memory error in javascript
我正在尝试编写一个基本的暴力类型脚本来处理我制作的示例 php 页面。这是我写的脚本:
var userElement = document.getElementById('username');
var passElement = document.getElementById('password');
//sets username, not randomized
var username = 'admin';
//expected characters
var alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')'];
var numOfGuesses = 0; //for fun
var numOfGuessesGenerated = 0; //for fun
var guesses1 = [];
var guesses2 = [];
var guesses3 = [];
var guesses4 = [];
var guesses5 = [];
var guesses6 = [];
var guesses7 = [];
var guesses8 = [];
var guess = "";
var memhandle = 0;
//first for loop is to get all different lengths covered, max being sixteen
var maxNumOfChars = 16;
//generates guesses one character at a time and appends them to array name guesses
for (var y = 0; y < maxNumOfChars; y++) {
for (var i = 0; i < alphabet.length; i++) {
while (i < maxNumOfChars) {
guess+=alphabet[i];
}
}
if (memhandle == 0) {
guesses1.push(guess);
memhandle = 1
} else if (memhandle == 1) {
guesses2.push(guess);
memhandle = 2;
} else if (memhandle == 2) {
guesses3.push(guess);
memhandle = 3;
} else if (memhandle == 3) {
guesses4.push(guess);
memhandle = 4;
} else if (memhandle == 4) {
guesses5.push(guess);
memhandle = 5;
} else if (memhandle == 5) {
guesses6.push(guess);
memhandle = 6;
} else if (memhandle == 6) {
guesses7.push(guess);
memhandle = 7;
} else if (memhandle == 7) {
guesses8.push(guess);
memhandle = 0;
}
numOfGuessesesGenerated++;
guess = "";
}
numOfGuessesesGenerated++;
console.log(numOfGuessesesGenerated);
console.log(guesses);
//try the guesses!
for (var x = 0; x < guesses.length; x++) {
userElement.value = username;
passElement.value = guesses[x];
numOfGuesses++;
console.log(numOfGuesses);
document.getElementById("myForm").submit(); //myForm IS the name of the form
}
document.getElementById("fid").submit();
我包含 "memhandle" 变量的原因是尝试将所有猜测拆分到不同的数组中,这也是我有这么多数组的原因。每当我尝试时,页面总是崩溃,有什么方法可以在 javascript 中做到这一点,或者我是否需要将用户名存储在某个地方然后从那里提取?我通过在 url 栏中执行 javascript: 来注入 javascript,这也可能是我出现问题的原因。
感谢任何帮助
您遇到的主要问题是 while (i < maxNumOfChars) {
。这个循环永远不会完成。你做了 guess+=alphabet[i];
但你根本没有增加 i (在这个循环内),所以它最终以崩溃告终。
我是否可以建议查看 iterator functions 以完全避免使用数组?
var userElement = document.getElementById('username');
var passElement = document.getElementById('password');
//sets username, not randomized
var username = 'admin';
//expected characters
var alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')'];
var numOfGuesses = 0; //for fun
var numOfGuessesGenerated = 0; //for fun
var guess = "";
var memhandle = 0;
//first for loop is to get all different lengths covered, max being sixteen
var maxNumOfChars = 16;
//generates guesses one character at a time and appends them to array name guesses
function *getNextGuess() {
for (var y = 0; y < maxNumOfChars; y++) {
for (var i = 0; i < alphabet.length; i++) {
//while (i < maxNumOfChars) {
guess+=alphabet[i];
//}
}
yield guess;
}
}
//try the guesses!
for (var guess of getNextGuess()) {
console.log(guess);
numOfGuesses++;
console.log(numOfGuesses);
if (numOfGuesses > 10)
break;
}
//document.getElementById("fid").submit();
我正在尝试编写一个基本的暴力类型脚本来处理我制作的示例 php 页面。这是我写的脚本:
var userElement = document.getElementById('username');
var passElement = document.getElementById('password');
//sets username, not randomized
var username = 'admin';
//expected characters
var alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')'];
var numOfGuesses = 0; //for fun
var numOfGuessesGenerated = 0; //for fun
var guesses1 = [];
var guesses2 = [];
var guesses3 = [];
var guesses4 = [];
var guesses5 = [];
var guesses6 = [];
var guesses7 = [];
var guesses8 = [];
var guess = "";
var memhandle = 0;
//first for loop is to get all different lengths covered, max being sixteen
var maxNumOfChars = 16;
//generates guesses one character at a time and appends them to array name guesses
for (var y = 0; y < maxNumOfChars; y++) {
for (var i = 0; i < alphabet.length; i++) {
while (i < maxNumOfChars) {
guess+=alphabet[i];
}
}
if (memhandle == 0) {
guesses1.push(guess);
memhandle = 1
} else if (memhandle == 1) {
guesses2.push(guess);
memhandle = 2;
} else if (memhandle == 2) {
guesses3.push(guess);
memhandle = 3;
} else if (memhandle == 3) {
guesses4.push(guess);
memhandle = 4;
} else if (memhandle == 4) {
guesses5.push(guess);
memhandle = 5;
} else if (memhandle == 5) {
guesses6.push(guess);
memhandle = 6;
} else if (memhandle == 6) {
guesses7.push(guess);
memhandle = 7;
} else if (memhandle == 7) {
guesses8.push(guess);
memhandle = 0;
}
numOfGuessesesGenerated++;
guess = "";
}
numOfGuessesesGenerated++;
console.log(numOfGuessesesGenerated);
console.log(guesses);
//try the guesses!
for (var x = 0; x < guesses.length; x++) {
userElement.value = username;
passElement.value = guesses[x];
numOfGuesses++;
console.log(numOfGuesses);
document.getElementById("myForm").submit(); //myForm IS the name of the form
}
document.getElementById("fid").submit();
我包含 "memhandle" 变量的原因是尝试将所有猜测拆分到不同的数组中,这也是我有这么多数组的原因。每当我尝试时,页面总是崩溃,有什么方法可以在 javascript 中做到这一点,或者我是否需要将用户名存储在某个地方然后从那里提取?我通过在 url 栏中执行 javascript: 来注入 javascript,这也可能是我出现问题的原因。 感谢任何帮助
您遇到的主要问题是 while (i < maxNumOfChars) {
。这个循环永远不会完成。你做了 guess+=alphabet[i];
但你根本没有增加 i (在这个循环内),所以它最终以崩溃告终。
我是否可以建议查看 iterator functions 以完全避免使用数组?
var userElement = document.getElementById('username');
var passElement = document.getElementById('password');
//sets username, not randomized
var username = 'admin';
//expected characters
var alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')'];
var numOfGuesses = 0; //for fun
var numOfGuessesGenerated = 0; //for fun
var guess = "";
var memhandle = 0;
//first for loop is to get all different lengths covered, max being sixteen
var maxNumOfChars = 16;
//generates guesses one character at a time and appends them to array name guesses
function *getNextGuess() {
for (var y = 0; y < maxNumOfChars; y++) {
for (var i = 0; i < alphabet.length; i++) {
//while (i < maxNumOfChars) {
guess+=alphabet[i];
//}
}
yield guess;
}
}
//try the guesses!
for (var guess of getNextGuess()) {
console.log(guess);
numOfGuesses++;
console.log(numOfGuesses);
if (numOfGuesses > 10)
break;
}
//document.getElementById("fid").submit();