Tôi đang cố gắng khử trùng một chuỗi liên quan đến đầu vào của người dùng mà không cần phải tự tạo thủ công cho chính mình, nếu đó là cách duy nhất tôi cũng đánh giá cao nếu có ai hướng tôi đi đúng hướng để một regex mà không có khả năng bị thiếu bất cứ điều gì. Có một số phương thức trong Rails có thể cho phép bạn nhập vào các lệnh SQL tự nhiên, làm cách nào để mọi người thoát khỏi đầu vào của người dùng cho những lệnh đó?Ruby on Rails: Làm thế nào để khử trùng một chuỗi cho SQL khi không sử dụng tìm?
Câu hỏi tôi hỏi là rộng rãi, nhưng trong trường hợp cụ thể của tôi, tôi đang làm việc với một cột trong cơ sở dữ liệu Postgres của mình mà Rails không hiểu một cách nguyên bản như tôi biết, tsvector, thông tin tìm kiếm văn bản. Rails có thể viết và đọc từ nó như thể nó là một chuỗi, tuy nhiên, không giống như một chuỗi, nó dường như không tự động thoát nó khi tôi làm những thứ như vector = bên trong mô hình.
Ví dụ, khi tôi làm model.name = '::', trong đó name là một chuỗi, nó hoạt động tốt. Khi tôi làm model.vector = '::' nó lỗi ra:
ActiveRecord::StatementInvalid: PGError: ERROR: syntax error in tsvector: "::"
"vectors" = E'::' WHERE "id" = 1
Điều này dường như là một vấn đề gây ra bởi thiếu thoát của dấu chấm phẩy, và tôi có thể tự thiết lập các vector = '::' tốt .
Tôi cũng đã có ý tưởng sáng, có lẽ tôi chỉ có thể gọi một cái gì đó như:
ActiveRecord::Base.connection.execute "UPDATE medias SET vectors = ? WHERE id = 1", "::"
Tuy nhiên, cú pháp này không làm việc, bởi vì các lệnh SQL nguyên không có quyền truy cập để tìm của phương pháp thoát và nhập chuỗi bằng cách sử dụng? dấu.
Điều này đánh tôi là vấn đề tương tự như gọi kết nối.thực hiện với bất kỳ loại đầu vào người dùng nào, vì tất cả đều làm giảm các chuỗi, nhưng tôi dường như không tìm thấy cách nào để gọi chuỗi SQL của Rails theo cách thủ công phương pháp vệ sinh. Bất cứ ai có thể cung cấp bất kỳ lời khuyên?
Thanks for the tip, đã làm việc chính xác như bạn đã nói. Thật không may, tuy nhiên, có vẻ như Rails không khử trùng colons (:) cho SQL thực sự, và tôi vẫn nhận được lỗi trên dòng đó. Có lẽ yêu cầu colons được khử trùng là duy nhất cho tsvectors. Có vẻ như tôi sẽ phải đi đến tuyến đường hối hiềm. –