gpt4 book ai didi

ruby-on-rails - ActiveSupport::CoreExtensions::String::Inflections.constantize 与用户提供的数据一起使用是否安全?

转载 作者:行者123 更新时间:2023-12-04 03:43:45 29 4
gpt4 key购买 nike

背景

目前,我正在开发 Rails 应用程序。我有不同的产品可以通过不同的供应商进行加工。所有供应商都需要特定格式的文本文件才能处理订单。

我决定使用 Factory 类来生成 Formatter 类的实例,这些实例将以正确的格式呈现订单信息。

在工厂类中我考虑使用下面的代码:

class ExportFactory
def self.exporter_class_for_vendor(vendor_name)
class_name = "ProductExporter#{vendor_name}".gsub(' ','').camelize
class_name.constantize
end
end

问题

使用ActiveSupport::CoreExtensions::String::Inflections.constantize会省钱吗?关于用户提交的数据?或者,我应该只对类名进行硬编码。

注意:在这个特定的应用程序中,唯一能够更改给定数据的用户是对整个系统具有完全控制权的管理员用户。

最佳答案

它应该是安全的,但这取决于你之后用它做什么。

例如,如果稍后在类上调用 #delete,则 File 的输入将很危险。

我的首选方法是将所有这种性质的用户可访问类保存在一个模块中,然后根据该模块的 #constants 验证用户输入。这确保您只向用户开放 ruby​​ 命名空间的一小部分,并且还允许您创建下拉列表,以便用户可以选择模块,而不仅仅是猜测名称。

另一种提供相同级别安全性的方法是在用户输入的开头为这个充满可用类的模块的名称添加前缀。

module AvailableClasses
Foo = ::Foo
Bar = ::Bar
end

validates_inclusion_of :user_input, :in => AvailableClasses.constants

AvailableClasses.const_get(user_input)

"AvailableClasses::#{user_input}".constantize

关于ruby-on-rails - ActiveSupport::CoreExtensions::String::Inflections.constantize 与用户提供的数据一起使用是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1627935/

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