我有一个简单的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代码? 答案 0 :(得分:2)
一般而言,序列化您想要的任何内容都是完美的。任何类型的用户数据都是可以接受的。
这假设您已经修补了Rails 3.2或4.0的绝对最新版本。过去YAML和JSON序列化存在一些问题,但这些问题已经过修补和解决。
使用GemCanary等工具测试您的应用程序是否已知漏洞,以确保您是最新的,并抓住未来的问题。