我有一个简单的 ActiveRecord 类,它记录一个事件并使用该serialize
方法存储一些额外的数据。它有一个用于事件的字符串列和一个用于存储数据对象的文本列。
# 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 代码? - 我的目标是提供一种方法来从我的应用程序中的任何位置记录事件并存储有关该事件的任何类型的数据。有没有比我在这里设置的更好的方法来执行此操作?