- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
目前,我正在开发 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/
我有一个单词列表,将近 5000 个英语单词,对于每个单词我都需要这些屈折形式: 名词:单复数 动词:不定式,一般现在时,一般现在时第三人称,一般过去时,现在分词(ing形式),过去分词 形容词:比较
欧洲的许多语言都是屈折的。这意味着一个单词可以在文本中以多种形式书写。例如,波兰语“komputer”中的“计算机”一词有多种形式:“komputera”、“komputerowi”、“kompute
我将 NLTK WordNet Lemmatizer 用于词性标记项目,首先将训练语料库中的每个单词修改为其词干(就地修改),然后仅在新语料库上进行训练。但是,我发现词形还原器没有按我的预期运行。 例
我将 NLTK WordNet Lemmatizer 用于词性标记项目,首先将训练语料库中的每个单词修改为其词干(就地修改),然后仅在新语料库上进行训练。但是,我发现 lemmatizer 没有像我预
背景 目前,我正在开发 Rails 应用程序。我有不同的产品可以通过不同的供应商进行加工。所有供应商都需要特定格式的文本文件才能处理订单。 我决定使用 Factory 类来生成 Formatter 类
我是一名优秀的程序员,十分优秀!