Ruby on Rails 「SQLインジェクション : SQL Injection」対策

RailsではActiveRecordがクエリのプレースフォルダ機能を提供しています。プレースフォルダとは、SQLコマンドと実際の値を分離する方法で、SQL中には「この部分に変数が入ります」と言う宣言をしておいて、クエリ実行時に変数を渡して内部的に完全なクエリを作成します。

ActiveRecordには、DBIで使われている'?'パラメータ記法と、名前付きパラメータ記法の2種類のプレースフォルダがあります。

'?'パラメータ
Food.find(:all, :conditions=>["name = ?", params[:name]])

名前付きパラメータ
Food.find(:all, :conditions=>["name = :name", :name=>params[:name]])

どちらの場合も、ActiveRecordが内部的に、引数をサジタイニングして取得クエリを作成&実行してくれます。