C'è un modo per disinfettare il metodo sql in rails find_by_sql
?Rails, come disinfettare SQL in find_by_sql
ho provato questa soluzione: Ruby on Rails: How to sanitize a string for SQL when not using find?
ma non riesce a
Model.execute_sql("Update users set active = 0 where id = 2")
Si genera un errore, ma viene eseguito il codice SQL e l'utente con ID 2 ora ha un account disabilitato.
semplice find_by_sql
anche non funziona:
Model.find_by_sql("UPDATE user set active = 0 where id = 1")
# => code executed, user with id 1 have now ban
Edit:
Beh il mio cliente chiesto di fare quella funzione (selezionare da SQL) nel pannello di amministrazione per fare qualche query complessa (unisce, condizioni speciali ecc.). Quindi voglio davvero trovarlo.
Secondo Edit:
voglio ottenere che non sarà eseguito il codice SQL 'male'.
Nel pannello di amministrazione è possibile digitare query ->Update users set admin = true where id = 232
e si desidera bloccare qualsiasi comando SQL UPDATE/DROP/ALTER. Voglio solo sapere, che qui puoi SOLO eseguire SELECT.
Dopo alcuni tentativi concludo lo sanitize_sql_array
sfortunatamente non lo faccio.
C'è un modo per farlo in Rails ??
Ci scusiamo per la confusione ..
Risultato: 'metodo protetto 'sanitize_sql_array' chiamato per ActiveRecord :: Base: class' –
Ho aggiornato il mio post. Spero che ti possa aiutare – bor1s
.. o puoi usare questo: 'ActiveRecord :: Base.send (: sanitize_sql_array," la tua stringa ")' – bor1s