Sử dụng quote
là an toàn. Tôi đã đọc câu trả lời trên trang bạn đã liên kết tới
và tôi không thấy ai nói rằng quote
không an toàn. Tôi thấy câu hỏi của bạn về việc sử dụng "dấu ngoặc kép". Có, nếu bạn chỉ đặt dấu ngoặc kép xung quanh một chuỗi, điều đó không an toàn, ví dụ:
q = "SELECT * FROM users where email = '#{params[:email]}'"
Nhưng sử dụng quote
(phương pháp) ổn:
q = "SELECT * FROM users where email = #{connection.quote(params[:email])}"
Bạn có thể chơi xung quanh bảng điều khiển và cố gắng hết sức để phá vỡ nó, nhưng tôi không nghĩ rằng bạn sẽ làm được:
2.3.3 :003 > ActiveRecord::Base.connection.quote("f''oo")
=> "'f''''oo'"
Nếu bạn thành công, tôi chắc chắn rằng nhóm Rails sẽ muốn biết (một cách riêng tư)! Nhưng như bạn có thể thấy, quote
method không chỉ dán một câu trích dẫn ở đầu và cuối.
Ngoài ra, vì bạn nói rằng bạn đang tìm kiếm một trích dẫn có thẩm quyền, các nhận xét trong mã nguồn tự nó gợi ý rằng trích dẫn đầu vào của người dùng là mục đích dự kiến của các chức năng này:
# 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:
(Lưu ý rằng tôi đang hiển thị quote_string
cho nhận xét, nhưng bạn có thể nên sử dụng quote
, cố gắng tìm ra kiểu dữ liệu và làm điều gì đó thích hợp.)
Nhân tiện, đây là một câu hỏi tương tự cho câu hỏi của bạn, với câu trả lời từ tôi vào năm 2014 và một số lựa chọn thay thế nữa: Cách thực thi sql cập nhật thô với liên kết động trong rails