Jsfuzz: Тестер JavaScript кода.
Jsfuzz программой, работающей на основе fuzzer для тестирования JavaScript /Nodejs.
Fuzzing для безопасных языков, таких как nodejs, является мощной технологией для поиска ошибок, таких как необработанные исключения, логические ошибки, ошибки безопасности, которые возникают как из-за логических ошибок, так и из-за отказа в обслуживании, вызванных зависаниями и чрезмерным использованием памяти.
Fuzzing можно рассматривать как мощную и эффективную стратегию в реальном программном обеспечении в дополнение к классическим Unit-тестам.
Использование.
Fuzz Target.
Первым шагом является реализация следующей функции (также называемой fuzz target):
Особенности Fuzz Target:
Собственно сам Jsfuzz в действии.
Следующим шагом является загрузка js-fuzz и запуск вашего фаззера.
Jsfuzz будет генерировать и тестировать различные входные данные в бесконечном цикле. corpus является необязательным каталогом и будет использоваться для сохранения сгенерированных тестовых случаев, поэтому последующие запуски могут быть запущены из той же точки и предоставлены как начальный корпус.
JsFuzz также может начинаться с пустого каталога (т. Е. Без корпуса семени), хотя некоторые допустимые тестовые случаи в семени корпуса могут существенно ускорить фаззинг.
jsfuzz пытается имитировать некоторые аргументы и стиль вывода из libFuzzer .
Благодарности
jsfuzz процесс в значительной степени основывается на go-fuzz , первоначально разработанный Дмитрием Вьюковым. Который в свою очередь в значительной степени основан на AFL Михала Залевского .
Предыдущий пример этого был сделан [ https://github.com/connor4312/js-fuzz ] с немного другим дизайном, охватом и интерфейсом, но, похоже, в настоящее время он не поддерживается.
Для покрытия jsfuzz использует инструментарий istanbuljs и библиотеку покрытия.
Также автор Jsfuzz не против от пожертвований и сделать это вы можете по ссылке под моей благодарностью.
Спасибо за прочтение данной статьи и хочу выразить отдельное спасибо admin за предложение данной документации
Оригинальная документация: https://github.com/fuzzitdev/jsfuzz
neopaket
Jsfuzz программой, работающей на основе fuzzer для тестирования JavaScript /Nodejs.
Fuzzing для безопасных языков, таких как nodejs, является мощной технологией для поиска ошибок, таких как необработанные исключения, логические ошибки, ошибки безопасности, которые возникают как из-за логических ошибок, так и из-за отказа в обслуживании, вызванных зависаниями и чрезмерным использованием памяти.
Fuzzing можно рассматривать как мощную и эффективную стратегию в реальном программном обеспечении в дополнение к классическим Unit-тестам.
Использование.
Fuzz Target.
Первым шагом является реализация следующей функции (также называемой fuzz target):
Код:
function fuzz(buf) {
// call your package with buf
}
module.exports = {
fuzz
};
Особенности Fuzz Target:
- Jsfuzz будет вызывать цель fuzz в бесконечном цикле со случайными данными (в соответствии с алгоритмом покрытия), переданными buf (в отдельном процессе).
- Функция должна перехватывать и игнорировать любые ожидаемые исключения, возникающие при передаче неверного ввода в тестируемый пакет.
- Цель fuzz должна вызывать тестовую функцию/библиотеку с переданным буфером или преобразованием в тестовом буфере, если структура отличается или имеет другой тип.
- Fuzz-функции также могут реализовывать проверки уровня приложения для обнаружения прикладных/логических ошибок. Например: декодировать буфер с помощью библиотеки testable, снова кодировать его и проверять, что оба результата равны. Чтобы сообщить результат/ошибку, функция должна выдать исключение.
- jsfuzz сообщит о любых необработанных исключениях, таких как сбои, а также о входных данных, которые превысят лимит памяти, указанный для jsfuzz, или повиснут/будут превышать указанное время ожидания для каждого тестового случая.
Код:
const jpeg = require('jpeg-js');
function fuzz(buf) {
try {
jpeg.decode(buf);
} catch (e) {
// Those are "valid" exceptions. we can't catch them in one line as
// jpeg-js doesn't export/inherit from one exception class/style.
if (e.message.indexOf('JPEG') !== -1 ||
e.message.indexOf('length octect') !== -1 ||
e.message.indexOf('Failed to') !== -1 ||
e.message.indexOf('DecoderBuffer') !== -1 ||
e.message.indexOf('invalid table spec') !== -1 ||
e.message.indexOf('SOI not found1) !== -1) {
} else {
throw e;
}
}
}
module.exports = {
fuzz
};
Собственно сам Jsfuzz в действии.
Следующим шагом является загрузка js-fuzz и запуск вашего фаззера.
Код:
npm i -g jsfuzz
jsfuzz ./examples/jpeg/fuzz.js corpus
# Output:
#0 READ units: 0
#1 NEW cov: 61 corp: 0 exec/s: 1 rss: 23.37 MB
#23320 PULSE cov: 61 corp: 1 exec/s: 10614 rss: 35.3 MB
#96022 NEW cov: 70 corp: 1 exec/s: 11320 rss: 129.95 MB
#96971 NEW cov: 78 corp: 2 exec/s: 10784 rss: 129.95 MB
#97046 NEW cov: 79 corp: 3 exec/s: 9375 rss: 129.95 MB
#97081 NEW cov: 81 corp: 4 exec/s: 11666 rss: 129.95 MB
#97195 NEW cov: 93 corp: 5 exec/s: 9500 rss: 129.95 MB
#97216 NEW cov: 97 corp: 6 exec/s: 10500 rss: 129.95 MB
#97238 NEW cov: 102 corp: 7 exec/s: 11000 rss: 129.95 MB
#97303 NEW cov: 108 corp: 8 exec/s: 10833 rss: 129.96 MB
#97857 PULSE cov: 108 corp: 9 exec/s: 225 rss: 129.96 MB
#97857 PULSE cov: 108 corp: 9 exec/s: 0 rss: 940.97 MB
#97857 PULSE cov: 108 corp: 9 exec/s: 0 rss: 1566.01 MB
#97857 PULSE cov: 108 corp: 9 exec/s: 0 rss: 2053.49 MB
MEMORY OOM: exceeded 2048 MB. Killing worker
Worker killed
crash was written to crash-819587841e3c275338593b0d195b6163d5208866870e2abf3be8cfc781d2688d
crash(hex)=ffd8ffc09dfdb0ffff0e5296bd7fbbc4f9579096bd7fbbfc0e80d50000ffff36fa400100236701bf73ffaf8003a57f097f5e000000008023c4f9579096bd7fbb008000001500b34e8c018fda5212
Jsfuzz будет генерировать и тестировать различные входные данные в бесконечном цикле. corpus является необязательным каталогом и будет использоваться для сохранения сгенерированных тестовых случаев, поэтому последующие запуски могут быть запущены из той же точки и предоставлены как начальный корпус.
JsFuzz также может начинаться с пустого каталога (т. Е. Без корпуса семени), хотя некоторые допустимые тестовые случаи в семени корпуса могут существенно ускорить фаззинг.
jsfuzz пытается имитировать некоторые аргументы и стиль вывода из libFuzzer .
Благодарности
jsfuzz процесс в значительной степени основывается на go-fuzz , первоначально разработанный Дмитрием Вьюковым. Который в свою очередь в значительной степени основан на AFL Михала Залевского .
Предыдущий пример этого был сделан [ https://github.com/connor4312/js-fuzz ] с немного другим дизайном, охватом и интерфейсом, но, похоже, в настоящее время он не поддерживается.
Для покрытия jsfuzz использует инструментарий istanbuljs и библиотеку покрытия.
Также автор Jsfuzz не против от пожертвований и сделать это вы можете по ссылке под моей благодарностью.
Спасибо за прочтение данной статьи и хочу выразить отдельное спасибо admin за предложение данной документации
Оригинальная документация: https://github.com/fuzzitdev/jsfuzz
neopaket