首页 > 解决方案 > Fastify 相当于 express-mongo-sanitize

问题描述

您好 Fastify 专家,

在 MongoDB 查询中,我可以传递各种运算符,这可能会因具有各种攻击面而危及安全方面。

所以在发送有效载荷之前,我想清理查询/过滤器/排序等。但是我认为我不需要清理请求有效载荷,因为 Mongo 无论如何都会将其存储为 BSON,因此更安全。

现在在 Express 世界中,我们曾经有express-mongo-sanitize之类的插件。

你为 Fastify 世界推荐什么开源插件来实现类似的功能?

谢谢, 普拉迪普

标签: jsonschemafastify

解决方案


你有两个选择:

  1. 使用模式驱逐:将additionalPropertiesas 标志添加到输入模式中,将删除您从输入中不期望的所有键

使用此代码,您可以通过以下方式提交有效负载:

{
    foo: 'hello',
    $where: 'cut'
  }

并且$where密钥将被删除。

const fastify = require('fastify')({ logger: true })

fastify.post('/', {
  schema: {
    body: {
      type: 'object',
      additionalProperties: false,
      properties: {
        foo: { type: 'string' }
      }
    }
  }
},
async (request, reply) => {
  console.log(request.body)
  return request.body
})

fastify.listen(8080)
  1. 您链接的框架具有模块功能,您可以将其与钩子集成:
const mongoSanitize = require('express-mongo-sanitize');
fastify.addHook('preHandler', function hook (request, reply, done) {
  mongoSanitize.sanitize(request.body);
  done(null)
})

推荐阅读