我最近一直在研究一些Node ORM以便与PostgreSQL一起使用,并且希望在前端公开某种类型的灵活过滤。
我非常享受Sequelize提供的灵活性,其中包括过滤(例如根据N级深度的某种关系过滤模型)。
过滤机制是否安全在所有上暴露给任何前端API?我没有多少经验,所以我不确定哪些类型的字段可以传递给过滤器查询。
否则,对于更复杂的查询,我可能会使用像Knex这样的东西。
答案 0 :(得分:0)
一般情况下,如果您需要询问是否可以安全地公开where / include参数直接传递到您的前端,我建议您不要这样做。如果您不知道它的行为方式,您最终会快速泄露所有用户和密码哈希值。
因此,您可以通过验证传入的过滤参数来获得更好的覆盖,并且只有在将它们传递给查询之后才能更好地覆盖。您可以使用例如json schema来验证传入的参数。
例如在objection.js ORM中,这个东西的处理方式是你可以在代码中给出查询某些模式用户可以包含哪些数据来响应,然后传入的用户输入自动缩减到该子集(这仅在请求与请求的行有关的其他关系时才有效。
var houseWithPossiblePetsAndOwner = await House.query()
.allowEager('[pets, owner]')
.eager(eagerParamDirectlyFromEndUser)
.where('id', id);
您可以扩展您的首选ORM以支持这种额外的方法,它允许您为查询声明哪些参数可以从用户输入传递给它。