PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Rails 5 SQL Injection

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:

https:/github.com/rails/rails/blob/2471e6391dfe71cfbb8621bdf573729d961d3209/activerecord/lib/active_record/connection_adapters/abstract/quoting.rb#L6-L13

# Quotes the column value to help prevent
# {SQL injection attacks}[http://en.wikipedia.org/wiki/SQL_injection].
def quote(value)

https:/github.com/rails/rails/blob/0f1d0b1b5254e3678abaabbebb3362a100c10262/activerecord/lib/active_record/connection_adapters/postgresql/quoting.rb#L17-L20

# 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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tạo chuỗi từ mảng

  2. Cách đánh giá hiệu suất PostgreSQL bằng Sysbench

  3. Trả lại mảng UUID PostgreSQL dưới dạng danh sách với psycopg2

  4. Dạng url cơ sở dữ liệu postgresql cục bộ của tôi là gì?

  5. php cách sử dụng hộp chọn cho dữ liệu tìm kiếm trong chế độ xem danh sách (bảng)