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

问题描述

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

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

标签: node.jsmongoosejoi

解决方案


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
}

推荐阅读