Brug af quote
er sikker. Jeg læste svarene på den side, du linkede til
, og jeg kan ikke se nogen sige det quote
er usikker. Jeg kan se dit spørgsmål om brug af "citater". Ja, hvis du bare sætter anførselstegn rundt om en streng, er det usikkert, f.eks.:
q = "SELECT * FROM users where email = '#{params[:email]}'"
Men ved at bruge quote
(metoden) er fin:
q = "SELECT * FROM users where email = #{connection.quote(params[:email])}"
Du kan lege rundt i konsollen og prøve dit bedste for at bryde den, men jeg tror ikke, du vil være i stand til:
2.3.3 :003 > ActiveRecord::Base.connection.quote("f''oo")
=> "'f''''oo'"
Hvis du lykkes, er jeg sikker på, at Rails-teamet gerne vil vide det (privat)! Men som du kan se, er quote
metode gør mere end at sætte et citat i begyndelsen og slutningen.
Da du siger, at du leder efter et autoritativt citat, antyder kommentarerne i selve kildekoden, at det er formålet med disse funktioner at citere brugerinput:
# 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:
(Bemærk, at jeg viser quote_string
til kommentaren, men du skal nok bruge quote
, som forsøger at finde ud af datatypen og gøre noget passende.)
Her er i øvrigt et spørgsmål, der ligner dit, med et svar fra mig i 2014, og også nogle alternativer:Sådan udføres en rå opdatering sql med dynamisk binding i rails