Menggunakan quote
aman. Saya membaca jawabannya di halaman yang Anda tautkan
, dan saya tidak melihat ada orang yang mengatakan quote
tidak aman. Saya melihat pertanyaan Anda tentang menggunakan "kutipan". Ya, jika Anda hanya memberi tanda kutip di sekitar string, itu tidak aman, mis.:
q = "SELECT * FROM users where email = '#{params[:email]}'"
Tapi menggunakan quote
(metode) baik-baik saja:
q = "SELECT * FROM users where email = #{connection.quote(params[:email])}"
Anda bisa bermain-main di konsol dan mencoba yang terbaik untuk memecahkannya, tapi saya rasa Anda tidak akan bisa:
2.3.3 :003 > ActiveRecord::Base.connection.quote("f''oo")
=> "'f''''oo'"
Jika Anda berhasil, saya yakin tim Rails ingin tahu (secara pribadi)! Tapi seperti yang Anda lihat, quote
metode tidak lebih dari menempelkan kutipan di awal dan akhir.
Selain itu, karena Anda mengatakan bahwa Anda mencari kutipan otoritatif, komentar dalam kode sumber itu sendiri menunjukkan bahwa mengutip masukan pengguna adalah tujuan yang dimaksudkan dari fungsi-fungsi ini:
# 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:
(Catatan saya menunjukkan quote_string
untuk komentar, tetapi Anda mungkin harus menggunakan quote
, yang mencoba mencari tahu tipe data dan melakukan sesuatu yang sesuai.)
Omong-omong, ini pertanyaan yang mirip dengan pertanyaan Anda, dengan jawaban dari saya di tahun 2014, dan juga beberapa alternatif:Cara menjalankan sql pembaruan mentah dengan pengikatan dinamis di rails