SQLインジェクションに関するレールアクティブレコードクエリガイドから
このコードは非常に望ましいです:
Client.where("orders_count = ?", params[:orders])
このコードに:
Client.where("orders_count = #{params[:orders]}")
私の問題は、ワイルドカードで LIKE 句を使用したいということです。私の古いクエリは次のようになります -
User.where("first_name LIKE '%#{first_name}%'")
これはSQLインジェクションに対して脆弱ですが、これを行うと:
User.where("first_name LIKE '%?%'", first_name)
次に、結果の sql は次のようになります。
SELECT "users".* FROM "users" WHERE (first_name LIKE '%'michael'%')
これは余分な一重引用符のために無効です。
ワイルドカードと LIKE 句を使用し、SQL インジェクション攻撃から保護する最良の方法は何ですか?