【问题标题】:Rails: safe query against stored arrayRails:对存储数组的安全查询
【发布时间】:2023-03-14 20:48:01
【问题描述】:

我在对我的 Postgres 数据库中的数组字段执行 where 查询时遇到问题。
在我的 Rails 应用程序中,我有一个名为 People 的表。其中一列称为pets。现在此列包含数组值,即:

["dog", "cat", "fish"]

我想执行一个查询,例如返回所有拥有宠物狗的人。

我目前使用的解决方案看起来是这样的

People.where("\"pets\" @> '{\"" + checkedPet + "\"}'")

其中checkedPet 是一个变量,可以是“狗”或任何其他动物。

这可行,但我觉得很容易受到 SQL 注入问题的影响?
是这样吗?如果是这样,有什么更好、更安全的解决方案来避免它?

【问题讨论】:

    标签: sql ruby-on-rails arrays postgresql activerecord


    【解决方案1】:

    根据ActiveRecord and PostgreSQL guide,您可以执行以下操作:

    People.where('? = any("pets")', checkedPet)
    

    或者

    People.where('"pets" @> ?', "{#{checkedPet}}")
    

    【讨论】:

    • 这正是我想要的!非常感谢!!!一个微小的变化,结果你需要一个 = after ?如在 People.where('? = any("pets")', checkedPet) 中将其更改为,我将标记为正确再次感谢
    • @BenEaston:是的,这是一个错字)
    • 我不认为第二种方法可以防止 SQL 注入问题?
    • @BenEaston:确实如此,因为您将其与 ? 绑定。
    猜你喜欢
    • 2014-07-08
    • 2015-11-29
    • 1970-01-01
    • 2013-05-30
    • 2014-06-14
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多