⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 47.html

📁 写给JSP初级程序员的书
💻 HTML
字号:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<meta name="description" content="Java,JDBC,EJB,Open Source,jdk,rmi">
<meta name="Keywords"
content="Java, servlets, Java servlet, Javascript, ActiveX, VRML,
        applet, applets, directory, news, jdbc, applications, 
        Java applications, Java developer, Java development, developer, 
        classes, Jars.com, Jars, intranet, Java applet, Javabeans, 
        Java products, JDK, Java development kit, java development environment, JIT,
        JavaPlan, enterprise tools, JVM, Java Virtual Machine, Java resources, 
        SUN, CGI, Perl, database, network, html,
        xml, dhtml, rating, ratings, review, jars, cgi, programming,
        software review, software rating">
<title>csdn_Intranet中用Policy文件设置Java的安全策略</title>
<style>
.news {   BACKGROUND: #007cd3;  font-family: "宋体"; font-size: 9pt }
.t {  font-family: "宋体"; font-size: 9pt }
.t1 { color:#007cd3;  font-family: "宋体"; font-size: 9pt }
.white { font-family: "宋体"; font-size: 9pt;color:#FFFFFF }
.red { font-family: "宋体"; font-size: 9pt;color:#FF0000 }
A:visited {color:#0000FF}
A:hover {color: #ff6666; text-decoration: none}
.text {font-size: 12px; line-height: 160%; font-family: "宋体"}
.text1 {color:#000000; font-size: 12px; line-height: 130%; font-family: "宋体"; text-decoration: none}
.text1:visited {color:#000000}
.text1:hover {color: #000000}
.text2 {color:#000000; font-size: 12px; line-height: 130%; font-family: "宋体"; text-decoration: none}
.text2:visited {color:#000000}
.text2:hover {color: #000000}
.text3 {font-size: 12px; line-height: 100%; font-family: "宋体"; text-decoration: none}
.large {font-size: 14.8px; line-height: 130%}
</style>
</head>

<body


<center>




  <tr>
    <td WIDTH="100%" VALIGN="TOP">
      <tr>
        <td WIDTH="100%" CLASS="white"></td>
      </tr>
    
      <tr>
        <td WIDTH="50%" bordercolor="#FFFFFF" CLASS="t1" bgcolor="#F0F0F0" align="center" nowrap>Intranet中用Policy文件设置Java的安全策略  </td>
    <p>    <td WIDTH="50%" bordercolor="#FFFFFF" CLASS="t1" bgcolor="#F0F0F0" align="center" nowrap>作者:杨绍方</td></p>
      </tr>
      <tr>        <td WIDTH="100%" bordercolor="#FFFFFF" CLASS="t" bgcolor="#F0F0F0" colspan="2">
           本文提出了使用安全策略文件来设置Java程序权限的一种简单的方法。由于企业内部网中各台计算机的位置、用途和安全性明确,更适于使用安全策略文件来设置Java的权限,软件的安装、设置、升级和迁移都非常方便,并且,还可以和数字签名配合使用,更重要的是,可以细分每个Java程序的权限,使用起来灵活方便。
        <h3>一、Java中安全策略的概念</h3>
        <font color="#ffffff">----</font>Java应用程序环境的安全策略,详细说明了对于不同的代码所拥有的不同资源的许可,它由一个Policy对象来表达。为了让applet(或者运行在 
        SecurityManager下的一个应用程序)能够执行受保护的行为,例如读写文件,applet(或 
        Java应用程序)必须获得那项操作的许可,安全策略文件就是用来实现这些许可。
        <p><font color="#ffffff">----</font>Policy对象可能有多个实体,虽然任何时候只能有一个起作用。当前安装的Policy对象,在程序中可以通过调用getPolicy方法得到,也可以通过调用setPolicy方法改变。Policy对象评估整个策略,返回一个适当的Permissions对象,详细说明哪些代码可以访问哪些资源。
        <p><font color="#ffffff">----</font> 
        策略文件可以储存在无格式的ASCII文件或Policy类的二进制文件或数据库中。本文仅讨论无格式的ASCII文件的形式。
        <h3>二、Policy文件的格式</h3>
        <font color="#ffffff">----</font>为了能够更好地理解下面的内容,建议在阅读时参照 
        \jdk1.2\jre\lib\security\java.policy文件和\jdk1.2\jre\lib\security\java.security文件的内容。
        <p><font color="#ffffff">----</font>Policy文件的语法格式与说明
        <p><font color="#ffffff">----</font>一个Policy文件实质上是一个记录列表,它可能含有一个 
        “keystore”记录,以及含有零个或多个“grant”记录。其格式如下:
        <pre>keystore “some_keystore_url&quot;, “keystore_type&quot;;

grant [ SignedBy “signer_names&quot; ] [ , CodeBase “URL&quot; ] {
    Permission permission_class_name [ “target_name&quot;  ] 
               [ , “action&quot;] [, SignedBy “signer_names&quot; ];
    Permission ...
};
</pre>
        <p><font color="#ffffff">----</font>(1)“keystore&quot;记录
        <p><font color="#ffffff">----</font>一个keystore是一个私有密钥(private 
        keys)数据库和相应的数字签名,例如X.509证书。Policy文件中可能只有一条keystore记录(也可能不含有该记录),它可以出现在文件中grant记录以外的任何地方。Policy配置文件中指定的 
        keystores用于寻找grant记录中指定的、签名者的公共密钥(public 
        keys),如果任何grant 记录指定签名者(signer_names),那么,keystore记录必须出现在policy配置文件中。
        <p><font color="#ffffff">----</font>“some_keystore_url&quot;是指keystore的URL位置, 
        “keystore_type&quot;是指keystore的类型。第二个选项是可选项,如果没有指定,该类型则假定由安全属性文件(java.security)中的“keystore.type&quot;属性来确定。keystore类型定义了 
        keystore信息的存储和数据格式,用于保护keystore中的私有密钥和keystore完整性的算法。 
        Sun Microsystems支持的缺省类型为“JKS”。
        <p><font color="#ffffff">----</font> (2)“grant&quot;记录
        <p><font color="#ffffff">----</font>在Policy文件中的每一个grant记录含有一个CodeSource 
        (一个指定的代码)及其permission(许可)。
        <p><font color="#ffffff">----</font>Policy文件中的每一条grant记录遵循下面的格式,以保留字“grant”开头,表示一条新的记录的开始,“Permission”是另一个保留字,在记录中用来标记一个新的许可的开始。每一个grant记录授予一个指定的代码(CodeBase)、一套许可(Permissions)。
        <p><font color="#ffffff">----</font>permission_class_name必须是一个合格并存在的类名,例如java.io.FilePermission,不能使用缩写(例如,FilePermission)。
        <p><font color="#ffffff">----</font>target_name用来指定目标类的位置,action用于指定目标类拥有的权限。
        <p><font color="#ffffff">----</font>target_name可以直接指定类名(可以是绝对或相对路径)、目录名,也可以是下面的通配符:
        <pre>directory/*  目录下的所有文件
*	    当前目录的所有文件
directory/-  目录下的所有文件,包括子目录
- 	    当前目录下的所有文件,包括子目录
&lt;&lt; ALL FILES &gt;&gt;文件系统中的所有文件
</pre>
        <p><font color="#ffffff">----</font>对于java.io.FilePermission,action可以是:read, 
        write, delete和execute。
        <p><font color="#ffffff">----</font>对于java.net.SocketPermission,action可以是:listen, 
        accept,connect,read,write。
        <p><font color="#ffffff">----</font> (3)Policy文件中的属性扩展(Property 
        Expansion)属性扩展与shell中使用的变量扩展类似,它的格式为:<br>
        “${some.property}&quot;
        <p><font color="#ffffff">----</font>实际使用的例子为:<br>
        permission java.io.FilePermission<br>
        “${user.home}&quot;, “read&quot;;
        <p><font color="#ffffff">----</font>“${user.home}&quot;的值为“d:\Project&quot;,因此,下面的语句和上面的语句是一样的:<br>
        permission java.io.FilePermission “d:\Project &quot;, “read&quot;;
        <h3>三、实 例</h3>
        <font color="#ffffff">----</font>当初始化Policy时,首先装载系统Policy,然后再增加用户Policy,如果两者都不存在,则使用缺省的Policy,即原始的沙箱模型。
        <p><font color="#ffffff">----</font>系统Policy文件的缺省位置为:<br>
        {java.home}/lib/security/java.policy (Solaris)<br>
        {java.home}\lib\security\java.policy (Windows)
        <p><font color="#ffffff">----</font>用户Policy文件的缺省位置为:<br>
        {user.home}/.java.policy (Solaris)<br>
        {user.home}\.java.policy (Windows)
        <p><font color="#ffffff">----</font>其实,在实际使用中,我们可能不会像上面介绍的那么复杂,特别是在不使用数字签名时。这时,我们完全可以借鉴JDK 
        1.2提供给我们的现成的 \jdk1.2\jre\lib\security\java.policy文件,根据我们的需要做相应的修改,本文就针对不使用数字签名情况详细说明安全策略文件的用法。
        <p><font color="#ffffff">----</font>下面,是一个完整的在Windows 
        95/98/NT下使用的.java.policy文件。在文件中,分别使用注释的形式说明了每个“permission”记录的用途。
        <pre>// For LanServerTalk.java and LanClientTalk.java

grant { 
  //对系统和用户目录“读”的权限
  permission java.util.PropertyPermission “user.dir&quot;, “read&quot;;
  permission java.util.PropertyPermission “user.home&quot;, “read&quot;;
  permission java.util.PropertyPermission “java.home&quot;, “read&quot;;
  permission java.util.PropertyPermission “java.class.path&quot;, “read&quot;;
  permission java.util.PropertyPermission “user.name&quot;, “read&quot;; 

  //对线程和线程组的操作权限
  permission java.lang.RuntimePermission “modifyThread&quot;;
  permission java.lang.RuntimePermission “modifyThreadGroup&quot;;

   //操作Socket端口的各种权限
   permission java.net.SocketPermission “-&quot;, “listen&quot;;
   permission java.net.SocketPermission “-&quot;, “accept&quot;;
   permission java.net.SocketPermission “-&quot;, “connect&quot;;
   permission java.net.SocketPermission “-&quot;, “read&quot;;
   permission java.net.SocketPermission “-&quot;, “write&quot;;

   //读写文件的权限
   permission java.io.FilePermission “-&quot;, “read&quot;;
   permission java.io.FilePermission “-&quot;, “write&quot;;

   //退出系统的权限,例如System.exit(0)
   permission java.lang.RuntimePermission “exitVM&quot;;
};
</pre>
        <h3>四、.Java.policy文件的使用</h3>
        <font color="#ffffff">----</font> 对于Windows 95/98/NT,使用.Java.policy文件的方法主要有下面两种。
        <p><font color="#ffffff">----</font>1. 使用缺省目录
        <p><font color="#ffffff">----</font> 
        我们可以简单地将编辑好的.Java.policy文件拷贝到 Windows 
        95/98/NT的HOME目录,这时,所有的applet(或Java应用程序)可能都拥有某些相同的权限,使用起来简单,但不灵活(例如:对于Java.io.FilePermission 
        ,其目标类的 target_name必须使用绝对路径),如果不是在企业内部网中使用,还可能存在一定安全隐患。
        <p><font color="#ffffff">----</font> 2. 在命令行中指定
        <p><font color="#ffffff">----</font> 
        在命令行,如果我们希望传递一个Policy文件给 
        appletviewer,还可以使用“-J-Djava.security.policy&quot;参数来指定policy的位置:
        <pre>appletviewer -J-Djava.security.policy=pURL  myApplet
</pre>
        <p><font color="#ffffff">----</font>pURL为Policy文件的位置。下面,是一个实际的例子,以当前目录的.java.policy文件所指定的安全策略运行当前目录的LanServerTalk.html(文件中装载并运行LanServerTalk.Java):
        <pre> appletviewer -J-Djava.security.policy
          =.Java.policy LanServerTalk.html 
</pre>
        <p><font color="#ffffff">----</font>这种方法使用灵活,特别是作为一个软件包在企业内部网中发布时,安装、设置和迁移软件,基本无须修改Policy文件的内容,使用起来相当简单,而且,安全许可的范围控制较精细。 
     
        </td>
      </tr>
    </td>
  </tr>
</div>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -