【问题标题】:User query string in RailsRails 中的用户查询字符串
【发布时间】:2014-11-13 17:37:14
【问题描述】:

从用户那里获取字符串并在查询的WHERE 语句中使用它的最佳且安全的方法是什么?

假设我有一个名为 DB 的模型,其中包含 c1c2 列。我希望用户能够给我一个类似str="c1: value1"str="c1: value1, c2: value2" 的字符串,以便使用它来执行查找(DB.find(str))。我当然不希望他/她能够执行SQL 注入。有没有优雅的方法?

【问题讨论】:

    标签: sql ruby-on-rails ruby-on-rails-4


    【解决方案1】:

    这里要避免的最重要的事情是将用户响应直接放入 where 子句中。所以不要做类似 DB.where("c1 = value") 的事情。相反,您可以通过执行类似

    的操作来依赖内置在 sql 清理中的 rails

    DB.where("c1 t = ?", 值)

    AR 文档对此非常清楚。 http://guides.rubyonrails.org/active_record_querying.html#pure-string-conditions

    【讨论】:

    • 有没有一种优雅的方法可以用这种方法多次检查相同的值?像 DB.where("c1 t=? OR c2 t=?", value, value) 之类的东西(没有多次重复 value)。
    • 带sql号不过还有其他方法。谢谢。
    【解决方案2】:

    如果您的字符串格式是固定的,那么您可以将其转换为Hash,然后可以将其应用于#where 子句。

    string = "c1: value1, c2: value2"
    hash = Hash[*string.split(/[,:]/).map(&:strip)]
    DB.where(hash)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-16
      • 2015-11-27
      相关资源
      最近更新 更多