代码之家  ›  专栏  ›  技术社区  ›  Pablo Fernandez

在Rails上安全地转义用于连接、限制、选择等(非条件)的SQL片段的字符串

  •  12
  • Pablo Fernandez  · 技术社区  · 15 年前

    在RubyonRails中,对于条件,很容易进行SQL注入证明查询:

    :conditions => ["title = ?", title]
    

    标题来自外部,来自Web表单或类似的东西。

    但是如果在查询的其他部分使用SQL片段,比如:

    :select => "\"#{title}\" AS title"   # I do have something like this in one instance
    :joins => ["LEFT JOIN blah AS blah2 ON blah2.title = \"#{title}\""]
    

    有没有一种方法可以正确地转义这些字符串?

    1 回复  |  直到 15 年前
        1
  •  23
  •   Pablo Fernandez    15 年前

    通常在Rails中,连接是作为表示ID连接的符号(或作为二阶连接的哈希)完成的,您可以使用条件将其过滤掉。如果需要如图所示进行操作,则可以使用ActiveRecord sanitize_sql_array 要清除SQL字符串,请执行以下操作:

    sanitize_sql_array(["LEFT JOIN blah AS blah2 ON blah2.title = ?", @blah.title])