Examples
A Java applet from certain application is acquired and
subverted by an attacker. Then, he makes the victim accepts
and runs a Trojan or malicious code that was prepared to
manipulate non-final objects’ state and behavior. This code
is instantiated and executed continuously using default JVM
on victim’s machine. When the victim invokes the Java applet
from the original application using the same JVM, the
malicious process could be mixed with original applet, thus
it modifies values of non-final objects and executes under
victim’s credentials.
In the following example, the class “any_class” is
declared as final and “server_addr” variable is not:
public final class any_class extends class_Applet {
public URL server_addr;
…
}
In this case, the value of “server_addr” variable could
be set by any other function that has access to it, thus
changing the application behavior. A proper way to declare
this variable is:
public class any_class extends class_Applet {
public final URL server_addr;
…
}
When a variable is declared as final its value cannot be
modified.