Usando quote
è salvo. Ho letto le risposte su la pagina a cui ti sei collegato
, e non vedo nessuno dire quella quote
è insicuro. Vedo la tua domanda sull'uso di "virgolette". Sì, se metti le virgolette attorno a una stringa, non è sicuro, ad esempio:
q = "SELECT * FROM users where email = '#{params[:email]}'"
Ma usando quote
(il metodo) va bene:
q = "SELECT * FROM users where email = #{connection.quote(params[:email])}"
Potresti giocare con la console e fare del tuo meglio per romperlo, ma non credo che sarai in grado di:
2.3.3 :003 > ActiveRecord::Base.connection.quote("f''oo")
=> "'f''''oo'"
Se ci riesci, sono sicuro che il team di Rails vorrebbe saperlo (in privato)! Ma come puoi vedere, la quote
il metodo fa molto di più che attaccare una citazione all'inizio e alla fine.
Inoltre, poiché dici che stai cercando una citazione autorevole, i commenti nel codice sorgente stesso suggeriscono che citare gli input dell'utente è lo scopo previsto di queste funzioni:
# Quotes the column value to help prevent
# {SQL injection attacks}[http://en.wikipedia.org/wiki/SQL_injection].
def quote(value)
# Quotes strings for use in SQL input.
def quote_string(s) #:nodoc:
(Nota sto mostrando quote_string
per il commento, ma probabilmente dovresti usare quote
, che cerca di capire il tipo di dati e fare qualcosa di appropriato.)
A proposito, ecco una domanda simile alla tua, con una mia risposta nel 2014, e anche alcune alternative:Come eseguire un raw update sql con binding dinamico nei rail