J'essaie d'écrire LIKE requête.
J'ai lu que les requêtes de chaînes pures n'étaient pas sécurisées, mais je n'ai trouvé aucune documentation expliquant comment écrire en toute sécurité LIKE Hash Query.
C'est possible? Devrais-je me défendre manuellement contre l'injection SQL?
Pour vous assurer que votre chaîne de requête est correctement filtrée, utilisez le tableau ou la syntaxe de requête de hachage pour décrire vos conditions:
Foo.where("bar LIKE ?", "%#{query}%")
ou:
Foo.where("bar LIKE :query", query: "%#{query}%")
S'il est possible que le query
puisse inclure le %
caractère alors vous devez assainir query
avec sanitize_sql_like
premier:
Foo.where("bar LIKE ?", "%#{sanitize_sql_like(query)}%")
Foo.where("bar LIKE :query", query: "%#{sanitize_sql_like(query)}%")
En utilisant Arel, vous pouvez effectuer cette requête sécurisée et portable:
title = Model.arel_table[:title]
Model.where(title.matches("%#{query}%"))
Pour PostgreSQL, ce sera
Foo.where("bar ILIKE ?", "%#{query}%")
Tu peux faire
MyModel.where(["title LIKE ?", "%#{params[:query]}%"])