W Rails 3 mogę użyć sanitize_sql_array
do odkażenia surowego SQL dla chwilowych momentów, w których potrzebne jest surowe zapytanie SQL. Wydaje się, że zostało to usunięte w Railsach 4 lub nie zostało usunięte, ale przeniesione do ActiveRecord :: Sanitization. Jednak nie mogę teraz dowiedzieć się, jak nazwać sanitize_sql_array
teraz, więc jaki jest najlepszy sposób na odkażenie surowego SQL w Rails 4?Jak odkazić surowego SQL w Railsach 4
Chcę wyjaśnić, że mówię tu o pełnym surowym zapytaniu SQL, nie używając modeli Rail. Jestem świadomy, że to nie jest najlepsza praktyka, to jest właśnie to, co muszę zrobić dla tego konkretnego zapytania, ponieważ nie może być reprezentowany przez ładny interfejs ActiveRecord Railsów (Zaufaj mi, próbowałem).
Oto wezwanie próbki, co jest oczywiście prostsze niż to, co moje zapytanie faktycznie wygląda:
query = "SELECT * FROM users
LEFT OUTER JOIN posts ON users.id=posts.user_id
AND posts.topic_id = '#{topic.id}'"
# ^- Obviously bad and very vulnerable, this is what we're trying to fix
ActiveRecord::Base.connection.select_all(query)
Hej Nick, dzięki za odpowiedź, ale szukałem odpowiedzi, że będzie pracować dla surowych zapytań SQL, które nie przechodzą przez modele ActiveRecord. Zaktualizowałem moje pytanie, aby było to trochę bardziej zrozumiałe. –
@ColtonVoege Przepraszam, źle zrozumiałem pytanie. Jak powiedział @gabrielhilal, 'quote' jest właściwą metodą dezynfekcji surowego zapytania sql bez użycia ActiveRecord Model – NickGnd
Ta odpowiedź jest tak bardzo zła, używając' '# {user_name}' 'jest czcigodny dla SQL injection. – Hardik