最近我一直在研究与PostgreSQL一起使用的Node,并希望在前端公开某种类型的灵活过滤。
我非常喜欢Sequelize的where/include过滤提供的灵活性(例如,过滤基于某种关系N层深度的模型)。
过滤机制对任何前端API都是安全的吗?我没有太多的经验,所以我不确定什么类型的字段可以传递到过滤器查询。
否则,对于更复杂的查询,我可能会使用类似Knex的内容。
发布于 2017-04-24 07:10:06
通常,如果您需要问公开直接传递到您的前端的where/include参数是否安全,我建议您不要这样做。如果你不知道它的行为,你最终会很快泄露你所有的用户和密码哈希给世界。
因此,您最好通过验证传入的过滤参数,然后再将它们传递给查询。例如,您可以使用json模式来验证传入的参数。
例如,在objection.js ORM中,处理这个问题的方式是,您可以给代码中的查询某种模式--用户可以将什么数据包含到响应中,然后将传入的用户输入自动减少到该子集(只有在请求到被请求行的额外关系时才有效)。
var houseWithPossiblePetsAndOwner = await House.query()
.allowEager('[pets, owner]')
.eager(eagerParamDirectlyFromEndUser)
.where('id', id);您可以扩展您喜欢的ORM以支持这种额外的方法,它允许您为查询声明哪些参数可以从用户输入传递给它。
https://stackoverflow.com/questions/43569373
复制相似问题