Pomocí quote
je bezpečný. Odpovědi jsem četl na stránku, na kterou jste odkazovali
a nevidím nikoho, kdo by řekl tuto quote
je nejistý. Vidím vaši otázku ohledně používání „uvozovek“. Ano, pokud řetězec pouze vložíte do uvozovek, není to bezpečné, např.:
q = "SELECT * FROM users where email = '#{params[:email]}'"
Ale pomocí quote
(metoda) je v pořádku:
q = "SELECT * FROM users where email = #{connection.quote(params[:email])}"
Mohli byste si hrát v konzoli a snažit se ji ze všech sil rozbít, ale nemyslím si, že budete schopni:
2.3.3 :003 > ActiveRecord::Base.connection.quote("f''oo")
=> "'f''''oo'"
Pokud uspějete, jsem si jistý, že tým Rails by to rád věděl (soukromě)! Ale jak vidíte, quote
metoda umí víc než jen nalepit uvozovku na začátek a konec.
Také, protože říkáte, že hledáte autoritativní citaci, komentáře ve zdrojovém kódu naznačují, že zamýšleným účelem těchto funkcí je citování uživatelských vstupů:
# 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:
(Všimněte si, že zobrazujem quote_string
pro komentář, ale pravděpodobně byste měli použít quote
, který se snaží zjistit datový typ a udělat něco vhodného.)
Mimochodem, zde je podobná otázka jako vaše, s odpovědí ode mě v roce 2014 a také s některými alternativami:Jak spustit nezpracovaný aktualizační SQL s dynamickou vazbou v rails