Node.js & mongoose:是否可以检测用户请求是否包含架构定义中不存在的字段?

Node.js & mongoose: Is it possible to detect if a user request includes a field that doesn't exist in a schema definition?

Node.js & mongoose:是否可以检测用户请求是否包含模式定义中不存在的字段?

如果发生这种情况,我想检测它并对有问题的 IP 地址采取措施,因为它本质上可能是恶意的。以上可能吗?

joi validate function,将 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
}