ActiveRecord序列化,这样安全吗?

时间:2013-07-19 16:37:30

标签: ruby-on-rails ruby security serialization yaml

我有一个简单的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

问题

  1. serialize方法默认使用YAML来存储这样的对象。在用户提交通过参数传递的一些狡猾代码的情况下,是否存在安全风险?在检索和反序列化数据字段时,是否有机会提交用户提交的Ruby代码?
  2. 我的目标是提供一种从我的应用程序中的任何位置记录事件的方法,并存储有关该事件的任何类型的数据。有没有比我在这里设置的更好的方式进行预处理?

1 个答案:

答案 0 :(得分:2)

一般而言,序列化您想要的任何内容都是完美的。任何类型的用户数据都是可以接受的。

这假设您已经修补了Rails 3.2或4.0的绝对最新版本。过去YAML和JSON序列化存在一些问题,但这些问题已经过修补和解决。

使用GemCanary等工具测试您的应用程序是否已知漏洞,以确保您是最新的,并抓住未来的问题。