In Rails 3 Potrei usare sanitize_sql_array
per disinfettare SQL raw per quei momenti occasionali in cui è necessaria una query SQL raw. Ma sembra che sia stato rimosso in Rails 4, o non così tanto rimosso, ma spostato su ActiveRecord :: Sanitization. Tuttavia, non riesco a capire come chiamare sanitize_sql_array
ora, quindi qual è il modo migliore per disinfettare SQL raw in Rails 4?Come disinfettare SQL raw in Rails 4
Desidero chiarire che sto parlando di una query SQL completa completa qui, non utilizzando i modelli di Rail. Sono consapevole che questa non è una buona pratica, questo è proprio quello che devo fare per questa specifica query poiché non può essere rappresentata dalla bella interfaccia ActiveRecord di Rails (credimi, ho provato).
Ecco un esempio di richiamo, che è ovviamente più semplice di quello che la mia interrogazione si presenta come:
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)
Ehi Nick, grazie per la risposta, ma ero alla ricerca di una risposta che avrebbe lavorato per le query SQL prime che non passano attraverso i modelli ActiveRecord. Ho aggiornato la mia domanda per renderlo un po 'più chiaro. –
@ColtonVoege Mi dispiace, ho frainteso la domanda. Come ha detto @gabrielhilal, 'quote' è il modo giusto per disinfettare una query sql raw senza utilizzare il modello ActiveRecord – NickGnd
Questa risposta è così sbagliata, usando' '# {user_name}' è venerabile all'iniezione SQL. – Hardik