** 原始问题:**
作为一名安全专业人员,我担心的一件事情是Ruby没有Java的包私有性的并行。也就是说,下面的代码在Ruby中是无效的:
public module Foo
public module Bar
# factory method for new Bar implementations
def self.new(...)
SimpleBarImplementation.new(...)
end
def baz
raise NotImplementedError.new('Implementing Classes MUST redefine #baz')
end
end
private class SimpleBarImplementation
include Bar
def baz
...
end
end
end
希望能够防止对Foo::BarImpl进行猴子补丁是非常好的。这样,依赖库的人就知道没有人对它进行了修改。想象一下如果有人在你身上改变了MD5或SHA1的实现!我可以在这些类上调用freeze
,但我必须逐个类地这样做,并且如果我不非常小心地处理加载顺序,其他脚本可能在我完成保护应用程序之前修改它们。
Java提供了许多其他用于防御性编程的工具,其中许多在Ruby中不可能实现。(请参见Josh Bloch的书籍以获取一个好的列表。)这真的是一个问题吗?我应该停止抱怨并将Ruby用于轻量级事物,而不是希望得到“企业级”解决方案吗?
(不,Ruby默认情况下不会冻结核心类。请参见下文:)
require 'md5'
# => true
MD5.frozen?
# => false