在 API 上公开 Sequelize 过滤机制

Exposing Sequelize filtering mechanics on API

我最近一直在研究一些用于 PostgreSQL 的节点 ORM,并希望在前端公开某种类型的灵活过滤。

我非常喜欢 Sequelize 的 where/include 过滤所提供的灵活性(例如,根据 N 层深的某种关系过滤模型)。

过滤机制完全暴露给任何前端API安全吗?我对此没有太多经验,所以我不确定可以将哪些类型的字段传递给过滤器查询。

否则,对于更复杂的查询,我可能会改用 Knex 之类的东西。

一般来说,如果您需要询问公开直接传递给前端的 where/include 参数是否安全,我建议您不要这样做。如果您不知道它的行为方式,您最终会很快将所有用户和密码散列泄露给全世界。

因此,您可以通过验证传入的过滤参数并仅在此之后将它们传递给查询来更好地覆盖。您可以使用例如 json 架构来验证传入参数。

例如,在 objection.js ORM 中,您可以在代码中为查询提供特定模式,用户可以将哪些数据包含在响应中,然后传入的用户输入会自动减少为该模式子集(这仅在请求与所请求行的其他关系时有效)。

var houseWithPossiblePetsAndOwner = await House.query()
  .allowEager('[pets, owner]')
  .eager(eagerParamDirectlyFromEndUser)
  .where('id', id);

您可以扩展您喜欢的 ORM 以支持那种额外的方法,它允许您为查询声明哪些参数可以从用户输入传递给它。