gpt4 book ai didi

ruby-on-rails - Ruby on Rails 3 中的 attr_accessible 及其安全隐患

转载 作者:行者123 更新时间:2023-12-04 18:12:25 24 4
gpt4 key购买 nike

我最近进入了 Rails,我看到了这个 批量分配错误 经常在我想用 parent_id 救 child 的情况下.

为了解决这个问题,每个人都建议将关联的外键添加到 attr_accessbile列表。

我可以通过这样做来解决它,但不确定引擎盖下会发生什么。将foreign_key 列入白名单是真的吗?会带来安全问题吗?

让我们考虑以下模型场景:

class BusinessType < ActiveRecord ::Base
has_one :business_form
validates :name, :presence => true
attr_accesible :name, :enabled
end

class BusinessForm < ActiveRecord ::Base
belongs_to :business_type
validates :name, :presence => true
validates_associated :business_type, :presence=>true
attr_accessible :name, :enabled
end

在上述情况下,每当我尝试保存 business_form没有 business_type_idattr_accessible列表我会得到质量分配错误。当我将它添加到白名单时,即使是 business_type,我也没有收到任何错误消息选择框留空并提交表单。

我要求任何人在这方面的 rails 上有所了解。请指出任何可以详细解释的链接。

最佳答案

是的,这会带来安全问题。假设有人能够向您的 BusinessFormController#create 发帖,并且他们将“business_type_id”作为帖子的一部分传递。如果您的 Controller 只是通过执行以下操作来创建记录:

def create
BusinessForm.create(params[:business_form])
end

然后它允许用户为该表单指定任何业务类型。我不知道您的网站是如何工作的,但这可能是个问题,因为某些用户可能被允许创建某些类型的表单。将外键添加到 attr_accessible 的主要问题是它允许黑客(任何了解 Web 编程的人)将这个新创建的记录与任何外键对象相关联。如果在这种情况下你不在乎或者它没有受到限制,那么它可能并不重要。

如果您仍然想遵循人们告诉您的内容,为什么不保留 attr_accessible 没有“business_type_id”,而是像这样编写您的操作:
def create
bf = BusinessForm.new({:business_type_id => params[:business_form][:business_type_id]})
bf.attributes=(params[:business_form].except(:business_type_id))
bf.create
end

关于ruby-on-rails - Ruby on Rails 3 中的 attr_accessible 及其安全隐患,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12363774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com