Korzystanie z quote
jest bezpieczny. Przeczytałem odpowiedzi na strona, do której prowadziłeś link
, i nie widzę nikogo, kto mówi tak quote
jest niepewny. Widzę twoje pytanie dotyczące używania "cytatów". Tak, jeśli po prostu umieścisz cudzysłów wokół ciągu, co jest niepewne, np.:
q = "SELECT * FROM users where email = '#{params[:email]}'"
Ale używając quote
(metoda) jest w porządku:
q = "SELECT * FROM users where email = #{connection.quote(params[:email])}"
Możesz bawić się w konsoli i starać się ją złamać, ale nie sądzę, że będziesz w stanie:
2.3.3 :003 > ActiveRecord::Base.connection.quote("f''oo")
=> "'f''''oo'"
Jeśli ci się uda, jestem pewien, że zespół Rails chciałby (prywatnie) o tym wiedzieć! Ale jak widać, quote
metoda to coś więcej niż wklejanie cytatu na początku i na końcu.
Ponadto, ponieważ mówisz, że szukasz autorytatywnego cytatu, komentarze w samym kodzie źródłowym sugerują, że cytowanie danych wejściowych użytkownika jest zamierzonym celem tych funkcji:
# 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:
(Uwaga, pokazuję quote_string
dla komentarza, ale prawdopodobnie powinieneś użyć quote
, który próbuje określić typ danych i zrobić coś odpowiedniego.)
Nawiasem mówiąc, oto pytanie podobne do twojego, z odpowiedzią ode mnie w 2014 roku i kilkoma alternatywami:Jak wykonać surową aktualizację sql z dynamicznym wiązaniem w rails