メソッドを使用してイベントをログに記録し、いくつかの追加データを保存する単純な ActiveRecord クラスがありserialize
ます。イベント用の 1 つの文字列列と、データ オブジェクトを格納するためのテキスト列があります。
# DB Columns
# event => string
# data => text
#
class MyLog < ActiveRecord::Base
serialize :data
validates :event, :data, :presence => true
end
私のコントローラーでは、ユーザーが送信した情報を取得し、それをデータとして含めたいと思います:
class ContactFormController < ApplicationController
def send_message
...
data = {name: params[:name], email: params[:email], message: params[:message]}
MyLog.create(event: "User submitted contact form", data: data)
...
end
end
質問
- この
serialize
メソッドは、デフォルトで YAML を使用して、このようなオブジェクトを保存します。ユーザーがパラメーターを介して渡される巧妙なコードを送信した場合、セキュリティ上のリスクはありますか? データ フィールドが取得されて逆シリアル化されるときに、ユーザーが送信した Ruby コードが実行される可能性はありますか? - 私の目標は、アプリのどこからでもイベントをログに記録し、そのイベントに関するあらゆる種類のデータを保存する方法を提供することです。ここで設定した方法よりも、これを実行するためのより良い方法はありますか?