JVMにクラスの読み込みが要求されたときに使用するセキュリティモデルを理解しようとしています。Java ClassLoaderセキュリティモデル
Sandboxingに関するJVM仕様から、標準のJVM実装では、を少なくとも1つ保持して、primordial ClassLoader
とは独立していると考えられます。これはアプリケーションクラスファイルをロードするために使用されます(例えば、提供されたクラスパスから)。その後、
クラスはそれで、たとえば、名前空間、java/lang/String
ですされていないClassLoader
から要求された場合、そのことがあった場合、それは、Java APIのからクラスをロードしようとした、原始ClassLoader
に要求を転送するには、 NoClassDefFoundError
がスローされます。
原文のClassLoader
はJava APIネームスペースからクラスをロードするだけで、他のすべてのクラスは個別のClassLoader
実装を介してロードされると思いますか?
そして、それは悪質なクラスは、Java APIのメンバーになりすますことができないことを意味するので、これはより安全なクラスのロードを作ることは、これは保護された名前空間で、現在のClassLoader
で使用することはできませんので(java/lang/Virus
を言うことができます) ?
Java APIのクラスが悪意のあるクラスに置き換えられないようにしたり、class
の確認中に検出されることはありますか?
基本的に正しい。 「原始的な」ClassLoaderは「ブートClassLoader」と呼ばれ、「ブートクラスパス」からクラスをロードします。 "security officer"がブートクラスパスが指定されているJVM呼び出し(例えば、コマンドライン)を制御している限り、これによって得られる保護は合理的に「強」です。 –
(いくつかのJVMにはブートクラスパス上に追加のセキュリティがあり、そのJARには特権属性が必要です) –
@HotLicks Javaランタイムがある 'boot classpath'はありますか? – Jivings