1

Rails 2.3 で LIKE クエリを実行できる唯一の方法は次のとおりです。

access_points.all(:conditions => "mac_address LIKE '%#{@q}%'")

公式ドキュメントによると、SQL インジェクションの対象となるため、この方法は安全ではありません。

独自の条件を純粋な文字列として構築すると、SQL インジェクションの悪用に対して脆弱になる可能性があります。たとえば、 Client.first(:conditions => "name LIKE '%#{params[:name]}%'") は安全ではありません。配列を使用して条件を処理する好ましい方法については、次のセクションを参照してください。 http://guides.rubyonrails.org/v2.3.8/active_record_querying.html

しかし残念ながら、LIKE クエリを正しく実行する方法が説明されておらず、LIKE は非常に一般的なキーワードであるため、Google で見つけることができませんでした。

ヒントはありますか?Rails は初めてですが、Symfony と Django の経験があります。

4

2 に答える 2

9

これはあなたがそれをしたい方法です:

:conditions => ['mac_address LIKE ?', "%#{@q}%"]
于 2012-06-06T14:50:55.630 に答える
1

オスカーは正しいです。いくつかの説明。Oscarが示すように、railssqlクエリフィルタリングを使用する必要があります。だからあなたは「いいね?」を入れます sqlステートメント内および検索文字列を(rubyコードを含む)外部に配置します。Railsが引き継ぎ、検索文字列を適切にサニタイズします。

また、Postgresにクエリを実行する場合、デフォルトで大文字と小文字を区別するクエリが使用されることを覚えておいてください。ただし、大文字と小文字を区別しないクエリもあります。これは私を数回得ました。

于 2012-06-06T14:58:57.133 に答える