2009-11-12 5 views
12

に、限界に参加する選択など(ない条件)のためのSQLフラグメントのための文字列をエスケープ、条件のために、それはSQLインジェクション防止クエリを作成するのは簡単です:が安全にRuby on Railsには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結合を表すシンボル(または2次結合のハッシュ)として実行され、条件を使用してそれをフィルタリングします。このようにする必要がある場合は、ActiveRecordのsanitize_sql_arrayを使用して、次のようにSQL文字列をクリーニングできます。