1. ホーム
  2. ruby

[解決済み] ActiveRecordのような安全なクエリ

2023-02-03 23:18:10

質問

LIKEクエリを作成しようとしています。

純粋な文字列クエリは安全ではないことを読みましたが、安全なLIKEハッシュクエリを書く方法を説明するドキュメントを見つけることができませんでした。

それは可能ですか?SQLインジェクションに対して手動で防御する必要がありますか?

どのように解決するのですか?

クエリ文字列が適切にサニタイズされるようにするには、配列またはハッシュのクエリ構文を使用して条件を記述します。

Foo.where("bar LIKE ?", "%#{query}%")

または

Foo.where("bar LIKE :query", query: "%#{query}%")

という可能性がある場合は query が含まれる可能性があります。 % 文字が含まれる可能性があり、それを許可したくない場合 (これは使用例による) は query sanitize_sql_like を最初に指定します。

Foo.where("bar LIKE ?", "%#{sanitize_sql_like(query)}%")
Foo.where("bar LIKE :query", query: "%#{sanitize_sql_like(query)}%")