問題の完璧な例を次に示します:分類子の gem が Rails を壊します。
** 元の質問: **
セキュリティの専門家として気になる点の 1 つは、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