Có cách nào để vệ sinh sql trong đường ray phương pháp find_by_sql
?Đường ray, cách vệ sinh SQL trong find_by_sql
Tôi đã thử giải pháp này: Ruby on Rails: How to sanitize a string for SQL when not using find?
Nhưng nó không thành công tại
Model.execute_sql("Update users set active = 0 where id = 2")
Nó ném một lỗi, nhưng mã sql được thực hiện và người dùng với ID 2 bây giờ có một tài khoản người tàn tật.
Simple find_by_sql
cũng không hoạt động:
Model.find_by_sql("UPDATE user set active = 0 where id = 1")
# => code executed, user with id 1 have now ban
Edit:
Vâng khách hàng của tôi yêu cầu để thực hiện chức năng đó (chọn bởi sql) trong bảng quản trị để thực hiện một số truy vấn phức tạp (tham gia, điều kiện đặc biệt, vv). Vì vậy, tôi thực sự muốn find_by_sql đó.
Second Edit:
Tôi muốn đạt được điều đó 'ác' mã SQL sẽ không được thực thi.
Trong bảng quản trị, bạn có thể nhập truy vấn ->Update users set admin = true where id = 232
và tôi muốn chặn bất kỳ lệnh UPDATE/DROP/ALTER SQL nào. Chỉ muốn biết, ở đây bạn chỉ có thể thực hiện SELECT.
Sau một số lần thử, tôi kết luận sanitize_sql_array
unfortunatelly không làm điều đó.
Có cách nào để thực hiện điều đó trong Rails không ??
Xin lỗi vì sự nhầm lẫn ..
Kết quả: 'phương pháp bảo vệ 'sanitize_sql_array' kêu gọi ActiveRecord :: Base: Class' –
Tôi đã cập nhật bài đăng của mình. Tôi hy vọng nó sẽ giúp bạn – bor1s
..hoặc bạn có thể sử dụng điều này: 'ActiveRecord :: Base.send (: sanitize_sql_array," chuỗi của bạn ")' – bor1s