请参阅如何限制应用程序
如在previous step中所见,Java 运行时在运行应用程序时不会自动安装 Security Manager。要将与下载的沙箱小应用程序相同的安全策略应用于在本地文件系统上找到的应用程序,可以使用新的-Djava.security.manager
命令行参数调用解释器。
要使用默认的安全 管理 器执行GetProps
应用程序,请键入以下内容:
java -Djava.security.manager GetProps
这是程序的输出:
C:\TEST>java -Djava.security.manager GetProps
About to get os.name property value
The name of your operating system is: SunOS
About to get java.version property value
The version of the JVM you are running is: 1.7.0
About to get user.home property value
Caught exception java.security.AccessControlException:
access denied ("java.util.PropertyPermission"
"user.home" "read")
下图显示了该过程。
Security-Sensitive Properties
Java 运行时默认情况下会加载默认策略文件,并授予所有代码访问某些常用属性的权限,例如"os.name"
和"java.version"
。这些属性对安全性不敏感,因此授予这些权限通常不会带来安全风险。
其他属性GetProps
试图访问"user.home"
和"java.home"
不在系统策略文件为其授予读取权限的属性中。因此,一旦GetProps
try访问这些属性中的第一个("user.home"
),安全 管理 器就会阻止访问并报告AccessControlException
。此异常表示当前有效的策略(包含一个或多个策略文件中的条目)不允许读取"user.home"
属性的权限。
Note:
代码始终可以从文件所在的同一目录(或该目录的子目录)中读取文件;它不需要显式权限即可这样做。代码还可以获得从其执行目录的路径名,并且该路径名可能包含敏感信息。例如,如果代码是从主目录(或主目录的子目录)执行的,则路径名可能会显示当前用户的名称。
默认策略文件
默认策略文件java.policy(默认情况下)位于:
-
Windows :
java.home\lib\security\java.policy
-
UNIX :
java.home/lib/security/java.policy
请注意,java.home 表示"java.home"
属性的值,该属性是一个系统属性,用于指定 JRE 的安装目录。因此,如果 JRE 安装在 Windows 上名为C:\jdk\jre
和 UNIX 上/jdk/jre
的目录中,则系统策略文件位于:
-
Windows :
C:\jdk\jre\lib\security\java.policy
-
UNIX :
/jdk/jre/lib/security/java.policy