在 Rails 上为连接、限制、选择等(不是条件)的 SQL 片段安全地转义字符串
Posted
技术标签:
【中文标题】在 Rails 上为连接、限制、选择等(不是条件)的 SQL 片段安全地转义字符串【英文标题】:Safely escape strings for SQL fragments for joins, limits, selects, and so on (not conditions) on Rails 【发布时间】:2010-12-15 23:23:05 【问题描述】:在 Ruby on Rails 中,对于条件,很容易进行 SQL 注入证明查询:
:conditions => ["title = ?", title]
标题来自外部,来自网络表单或类似的东西。
但是如果您在查询的其他部分使用 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】:通常在 Rails 中,连接是作为表示 id 连接的符号(或作为二阶连接的哈希)完成的,您可以使用条件将其过滤掉。如果需要如图所示进行操作,那么可以使用 ActiveRecord 的sanitize_sql_array
来清理 SQL 字符串,如下所示:
sanitize_sql_array(["LEFT JOIN blah AS blah2 ON blah2.title = ?", @blah.title])
【讨论】:
这是一个受保护的方法。 @FelipeZavan 对于较新的 Rails 版本不再是这种情况以上是关于在 Rails 上为连接、限制、选择等(不是条件)的 SQL 片段安全地转义字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Rails 中执行 AJAX-y 条件显示/隐藏表单字段?
如何在 Amazon OpsWorks 上为 Rails 应用程序运行 Redis?