J’essaie d’écrire la requête LIKE.
J’ai lu que les requêtes de chaînes de caractères pures ne sont pas sûres, mais je n’ai trouvé aucune documentation expliquant comment écrire en toute sécurité LIKE Hash Query.
C’est possible? Dois-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 la query
inclue le caractère %
vous devez d’abord assainir la query
avec sanitize_sql_like
:
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]}%"])