Използване на quote
безопасно е. Прочетох отговорите на страницата, към която сте се свързали
и не виждам някой да казва този quote
е несигурен. Виждам въпроса ви относно използването на "кавички". Да, ако просто поставите кавички около низ, това е несигурно, напр.:
q = "SELECT * FROM users where email = '#{params[:email]}'"
Но използвайки quote
(методът) е наред:
q = "SELECT * FROM users where email = #{connection.quote(params[:email])}"
Можете да си поиграете в конзолата и да опитате всичко възможно да я разбиете, но не мисля, че ще можете:
2.3.3 :003 > ActiveRecord::Base.connection.quote("f''oo")
=> "'f''''oo'"
Ако успеете, сигурен съм, че екипът на Rails би искал да знае (частно)! Но както виждате, quote
метод прави нещо повече от поставяне на цитат в началото и в края.
Освен това, тъй като казвате, че търсите авторитетен цитат, коментарите в самия изходен код предполагат, че цитирането на въведени от потребители е предвидената цел на тези функции:
# 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:
(Имайте предвид, че показвам quote_string
за коментара, но вероятно трябва да използвате quote
, който се опитва да разбере типа данни и да направи нещо подходящо.)
Между другото, ето въпрос, подобен на вашия, с отговор от мен през 2014 г., както и някои алтернативи:Как да изпълня необработена актуализация на sql с динамично обвързване в rails