Sto cercando di scrivere query LIKE.
Ho letto che le stringhe di stringhe pure non sono sicure, tuttavia non sono riuscito a trovare alcuna documentazione che spieghi come scrivere in modo sicuro LIKE Hash Query.
È ansible? Devo difendere manualmente contro SQL Injection?
Per garantire che la stringa di query venga correttamente disinfettata, utilizzare la matrice o la syntax della query hash per descrivere le condizioni:
Foo.where("bar LIKE ?", "%#{query}%")
o:
Foo.where("bar LIKE :query", query: "%#{query}%")
Se è ansible che la query
includa il carattere %
, è necessario disinfettare la query
con sanitize_sql_like
prima:
Foo.where("bar LIKE ?", "%#{sanitize_sql_like(query)}%") Foo.where("bar LIKE :query", query: "%#{sanitize_sql_like(query)}%")
Usando Arel puoi eseguire questa query sicura e portatile:
title = Model.arel_table[:title] Model.where(title.matches("%#{query}%"))
Per PostgreSQL lo sarà
Foo.where("bar ILIKE ?", "%#{query}%")
Tu puoi fare
MyModel.where(["title LIKE ?", "%#{params[:query]}%"])