node.js - Node.js & mongoose:是否可以检测用户请求是否包含架构定义中不存在的字段?
问题描述
Node.js & mongoose:是否可以检测用户请求是否包含架构定义中不存在的字段?
如果发生这种情况,我想检测它并对有问题的 IP 地址采取措施,因为它本质上可能是恶意的。以上可能吗?
解决方案
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
}
推荐阅读
- python - 如何处理 TypeError:'Thread' 类型的对象不是 JSON 可序列化的?
- ios - 在 AppDelegate.swift 中没有调用 userActivity 函数
- json - Flutter 无法将字符串转换为双精度
- multithreading - 循环缓冲区的填充速度比 AVAudioSourceNode 渲染块可以从中读取数据快
- google-sheets - COUNTIF 其他 google sheet 的 A2 行 by IMPORTRANGE
- javascript - Firebase Cloud Firestore 读写数据
- reactjs - React Form单handleChange函数具有多个输入和setState到复杂对象
- flutter - 在颤动中初始化文件
- javascript - 关于文本和内容从块中滑出的问题。它已经完成了 CSS 和 HTML
- javascript - Symfony 未定义的 AJAX 值