文档

Java™ 教程
隐藏目录
查看如何限制应用程序
路径:Java SE中的安全功能
课程:控制应用程序的快速导览

查看如何限制应用程序

正如您在上一步中所看到的,当Java运行时运行一个应用程序时,它不会自动安装安全管理器。为了将相同的安全策略应用于本地文件系统中的应用程序和下载的沙盒小程序,您可以使用新的-Djava.security.manager命令行参数调用解释器。

要使用默认安全管理器执行GetProps应用程序,请键入以下内容:

java -Djava.security.manager GetProps

以下是程序的输出:

C:\TEST>java -Djava.security.manager GetProps
    即将获取os.name属性值
      您的操作系统名称是:SunOS
    即将获取java.version属性值
      您正在运行的JVM版本是:1.7.0
    即将获取user.home属性值
    捕获到异常java.security.AccessControlException:
        拒绝访问("java.util.PropertyPermission"
        "user.home" "read")

该过程如下图所示。

应用程序被阻止读取属性


安全敏感属性

Java运行时默认加载一个默认策略文件,并允许所有代码访问一些常用的有用属性,如"os.name""java.version"。这些属性不是安全敏感的,因此授予这些权限通常不会带来安全风险。

GetProps尝试访问的其他属性"user.home""java.home"不在系统策略文件授予读取权限的属性之列。因此,一旦GetProps尝试访问这些属性中的第一个("user.home"),安全管理器将阻止访问并报告AccessControlException。此异常表示当前生效的策略,包括一个或多个策略文件中的条目,不允许读取"user.home"属性的权限。


注意: 代码始终可以从与其所在目录相同的目录(或该目录的子目录)读取文件;它不需要显式的权限来执行此操作。代码还可以获取其所执行的目录的路径名,该路径名可能包含敏感信息。例如,如果代码从主目录(或主目录的子目录)执行,路径名可能会显示当前用户的名称。

默认策略文件

默认策略文件java.policy(默认情况下)位于以下位置:

请注意,java.home代表"java.home"属性的值,它是指定JRE安装目录的系统属性。因此,如果JRE在Windows上安装在名为C:\jdk\jre的目录中,在UNIX上安装在/jdk/jre目录中,则系统策略文件位于以下位置:


上一页: 观察应用程序自由
下一页: 设置策略文件以授予所需权限