2009-11-12 32 views
12

在Ruby on Rails的,爲的條件下,很容易使SQL注入防查詢:安全逃脫SQL片段的連接,限制,選擇字符串,等等(沒有條件)on Rails的

: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}\""] 

是否有辦法妥善逃避那些字符串?

回答

22

通常在Rails中,連接是作爲表示一個ID連接的符號(或作爲二階連接的散列)完成的,並使用條件將其過濾掉。如果您需要如圖所示執行操作,那麼您可以使用ActiveRecord的sanitize_sql_array來清理SQL字符串,如下所示:

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