Node.js & mon goose: можно ли определить, включает ли запрос пользователя поле, которого нет в определении схемы? - PullRequest
0 голосов
/ 05 августа 2020

Node.js & mon goose: можно ли определить, содержит ли запрос пользователя поле, которого нет в определении схемы?

Если это произойдет, я хотел бы определить и примите меры против оскорбительного IP-адреса, поскольку он, вероятно, является вредоносным по своей природе. Возможно ли это выше?

1 Ответ

1 голос
/ 09 августа 2020

Функция проверки joi , устанавливает флаг allowUnknown в значение false (по умолчанию).

В вашем случае вы можете использовать эту функцию, чтобы поймать ошибку, которая возникает, когда неизвестные ключи присутствуют. В этом сценарии возникает ошибка object.unknown (учитывая, что ваша полезная нагрузка должна быть объектом).

Пример:

const Joi = require('@hapi/joi');

const joiSchema = Joi.object({
  a: Joi.string().required()
});

const validationResult = joiSchema.validate({ a: "hello world", b: 2 }, { abortEarly: false });
console.log(validationResult.error.details.some(err => err.type === 'object.unknown')); // true

Используя последний оператор консоли (который выдает значение true), вы можете узнать, отправил ли пользователь недопустимое значение в полезной нагрузке. Вы можете сделать что-то вроде:

if (validationResult.error && validationResult.error.details.some(err => err.type === 'object.unknown')) {
  // block the malicious IP
}
...