|
|
|
Sponsored Link •
|
|
Advertisement
|
Class loaders in the sandbox
In Java's sandbox, the class loader architecture is the first line of
defense against malicious code. It is the class loader, after all, that
brings code into the JVM -- code that could be hostile.
The class loader architecture contributes to Java's sandbox in two ways:
The class loader architecture guards the borders of the trusted class libraries by making sure untrusted classes can't pretend to be trusted. If a malicious class could successfully trick the JVM into believing it was a trusted class from the Java API, that malicious class potentially could break through the sandbox barrier. By preventing untrusted classes from impersonating trusted classes, the class loader architecture blocks one potential approach to compromising the security of the Java runtime.
Name-spaces and shields
The class loader architecture prevents malicious code from interfering
with benevolent code by providing protected name-spaces for classes
loaded by different class loaders. As mentioned above,
name-space is a set of unique names for loaded classes that is
maintained by the JVM.
Name-spaces contribute to security because you can, in effect, place a shield between classes loaded into different name-spaces. Inside the JVM, classes in the same name-space can interact with one another directly. Classes in different name-spaces, however, can't even detect each other's presence unless you explicitly provide a mechanism that allows the classes to interact. If a malicious class, once loaded, had guaranteed access to every other class currently loaded by the virtual machine, that class potentially could learn things it shouldn't know, or it could interfere with the proper execution of your program.
Creating a secure environment
When you write an application that uses class loaders, you create an
environment in which the dynamically loaded code runs. If you want the
environment to be free of security holes, you must follow certain rules
when you write your application and class loaders. In general, you will
want to write your application so that malicious code will be shielded
from benevolent code. Also, you will want to write class loaders such
that they protect the borders of trusted class libraries, such as those
of the Java API.
Name-spaces and code sources
To get the security benefits offered by name-spaces, you need to make
sure you load classes from different sources through different class
loaders. This is the scheme, described above, used by Java-enabled Web
browsers. The Java application fired off by a Web browser usually
creates a different applet class loader object for each source of
classes it downloads across the network. For example, a browser would
use one class loader object to download classes from
http://www.niceapplets.com, and another class loader object to download
classes from http://www.meanapplets.com.
|
Sponsored Links
|