Rails:针对存储数组的安全查询
问题描述:
我在执行对我的Postgres数据库中的数组字段的where查询时遇到问题。
在我的Rails应用程序中,我有一个名为People
的表格。其中的一列称为pets
。现在这个列包含数组值,即:Rails:针对存储数组的安全查询
["dog", "cat", "fish"]
我想执行一个查询,返回所有有宠物狗的人例如。
一直使用IVE到目前为止的溶液看起来这样
People.where("\"pets\" @> '{\"" + checkedPet + "\"}'")
其中checkedPet
是可变的,并且可以是“狗”或任何其他动物。
这工作,但我觉得很容易受到SQL注入的问题?
这是这种情况?如果是的话,什么是避免它的更好和更安全的解决方案?
答
根据ActiveRecord and PostgreSQL guide,你可以做到以下几点:
People.where('? = any("pets")', checkedPet)
或者
People.where('"pets" @> ?', "{#{checkedPet}}")
这正是我一直在寻找!非常感谢!!! 但是,一个微小的变化,你需要一个=后? 作为People.where 其更改为,我会标记为正确 再次感谢 –
@BenEaston(,checkedPet“=任何(‘宠物’)?”):是啊,这是一个错字) – potashin
我不认为第二种方法可以防止SQL注入问题呢? –