@ddddddd321

Как обойти проверку !Number(value)?

Как можно обойти проверку в таком коде?
cmd.one(/^(?:реши)\s([^]+)(\+|\-|\/|\*)([^]+)$/i, async (message, bot) => {
    message.args[1] = message.args[1].replace(/(к|k)/ig, '000');
    message.args[1] = message.args[1].replace(/(м|m)/ig, '000000');
    message.args[3] = message.args[3].replace(/(к|k)/ig, '000');
    message.args[3] = message.args[3].replace(/(м|m)/ig, '000000');
    if (!Number(message.args[1]) || !Number(message.args[3])) return;
    const result = eval(`${message.args[1]} ${message.args[2]} ${message.args[3]}`);
    return bot(`${message.args[1]}${message.args[2]}${message.args[3]}=${utils.sp(result)}`);
});


Я знаю, что код плохой, мне просто охото знать, как это можно обойти. Лимит символов ~4.5k на обход. Я думал, что можно через jsfuck, но что-то не вышло ))

Входные данные:
Реши 1+1
Вывод:
1+1=2
  • Вопрос задан
  • 165 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Вроде бы, не получится. Никак.

Number() при вызове как функции, конвертирует аргумент в численный тип. Если не получается, возвращает NaN (Not A Number) – специальное значение, которое при конвертации в булев даёт false.

Т.е. (! Number(value)) сработает когда переданное не перевести в число, или когда число 0.

Number() довольно строг с конвертацией в число, по сравнению даже с parseInt():
parseInt("123HabraHabr") // 123
Number("123HabraHabr")   // NaN

Чтобы хакнуть этот бот, нужно придумать такую строку, что Number() проглотил бы как число, но при этом она содержала код, который JS как-то интерпретирует. Типа '123 & alert("Habr!")' – но нет, через Number() это не пролезет, увы.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы