Rubyに挿入または更新する前に文字列を逃れる方法
-
13-10-2019 - |
質問
Ruby ActivereCordでは、SQLSを更新して挿入するための動的バインディングを提供しません。もちろん、Raw SQLを使用できますが、接続を維持する必要があるため、以下のようなコードを実行する前に更新またはSQLを挿入するより簡単な方法があるかどうかを知りたい:
ActiveRecord::Base.connection.insert(sql)
GSUBでコードを書くことができると思いますが、それを行う準備ができた方法があったかどうかはわかります。
解決
あなたはこれを行うことができます:
ActiveRecord::Base.send(:sanitize_sql,["select * from my_table where description='%s' and id='%s'","mal'formed", 55], "my_table")
もちろん、これはあなたが別々にパラマを持っていることを意味します。それが別の方法で機能するかどうかはわかりませんが、試してみてください。
他のヒント
Rails> = 3.2.5では、私のために次のように機能します。
evil_input = '"\';%#{}\"foo'
ActiveRecord::Base.connection.quote(evil_input)
=> "'\"'';%\#{}\\\"foo'"
タイトルが挿入または更新の前に文字列を逃れることについて話しているので、SQLインジェクションについて話すタグで、あなたが何を求めているのかはあまり明確ではありません。
ActiverCordが挿入または更新する前にコンテンツを自動的にエンコード/変更する必要がある場合は、チェックしましたか ActiverCordのコールバック? before_save
更新または作成すると、コールバックが発生します。コンテンツを保存する前にコンテンツを変更したい場合は、それを行うのに適した場所です。
SQLインジェクションを避けるために「更新」または「挿入」ステートメントに変数を挿入する代わりにSQLパラメーターを使用する場合は、ARを使用します。 可変バインディング. 。 「条件」のセクションまでスクロールします。
所属していません StackOverflow