RailsメソッドでSQLをサニタイズする方法はありfind_by_sql
ますか?
私はこの解決策を試しました: Ruby on Rails: How to sanitize a string for SQL when not using find?
しかし、それは失敗します
Model.execute_sql("Update users set active = 0 where id = 2")
エラーがスローされますが、SQL コードが実行され、ID 2 のユーザーのアカウントが無効になります。
シンプルfind_by_sql
も機能しません:
Model.find_by_sql("UPDATE user set active = 0 where id = 1")
# => code executed, user with id 1 have now ban
編集:
私のクライアントは、複雑なクエリ(結合、特別な条件など)を作成するために、管理パネルでその機能(SQLによる選択)を作成するように要求しました。だから私は本当にそれをfind_by_sqlしたい。
2番目の編集:
「邪悪な」SQL コードが実行されないようにしたいと考えています。
管理パネルで query ->Update users set admin = true where id = 232
と入力すると、UPDATE / DROP / ALTER SQL コマンドをブロックしたいと考えています。ここでは SELECT しか実行できないことを知りたいだけです。
いくつかの試みの後、sanitize_sql_array
残念ながらそうしないでください。
Railsでそれを行う方法はありますか??
混乱させて申し訳ありません..