admin 管理员组

文章数量: 1184232


2024年2月26日发(作者:shell判断文件存在且不为空)

维普资讯

网络技术 责任编辑:姚翌 Java Applet程序的安全规则 与访问第三方WEB服务器 曹大有周天宏 (郧阳师范高等专科学校计算机科学系湖北丹江口442700) 【摘要】Applet程序是用Java开发的一种小应用程序,它只能通过浏览器和小程序查看器运行,在默认情况下,它没有 访问第三方Web服务器的权利。本文通过讨论applet程序的安全规则,探讨了它没有这个权利的原因,并通过安全策略文件 使它能够访问第三方Web服务器。 . 【关键词】Applet服务器 浏览器 查看器 Intemet网上包含有极其丰富的信息,如何从WEB服务器上 wea ̄er new JTextArea(20,80); 读取所需要的信息,很多用户所面临的一个最大的问题是:缺少 wea ̄er.setFont(new Font(“Courier",Font.PLAIN,12)); 一种手段来引导我们有效地从这个丰富的数据库中检索到我们 contentPane.add(new JScroUPane(weather),BorderLayout.CEN 所需的信息。Java Applet程序的一个优点是:它能够帮助我们来 TER); 解决这个问题,我们可以使用Java Applet程序来检索我们所需 JPanel buttonPanel=new J ̄andO; 要的信息,并且用一定的格式显示这些信息。下面我们就给出这 JBuaon reportButton=new JButton(“Get report”); 方面的一个例子,来检索并显示结果信息。 reportButton.addActionListener(new ActionListener0{ 1通过Java Applet程序来检索WEB服 pubhc void acdonPefformed(AcdonEvent eVt){ 务器中信息 weather.setText( ); new ThreadO{ pubhc void run0{ 美国国家气象局在服务器:http://iwin.nws.noaa.gov/@的许 getWeather(getltem(satte,Sat ̄S), 多不同的文件上存放了天气预报信息,例如:加利福尼亚州的每 getltem(erport,reports)); 小时天气预报信息就存放在下面这个文件中 } http://iwin.nws.no ̄la.gov/iwin/ca/hourly.html }.startO; 其他文件中也存放着其它州的类似报告。 }}); 我们下面通过applet程序来获取天气预报信息 bu ̄onPane1.add(erportButton); (WeatherApplet.java)。在我们的applet程序中,为用户提供两个列 contentPane.add(buttonPanel,BorderLayout.SOUTH'); 表,一个是美国各州的列表,另一个是报告的类型。如果我们点击 该applet程序的主要操作是在getWeather0方法中进行的。 Get report按钮,该applet便会提取该报告。 该方法首先建立查询字符串,它是从applet标记的queryBase参 该applet程序的代码是一目了然的,在init0方法中我们主要 数那里获取基本的URL(http://iwin.nws.no ̄la.gov/iwin/)参数。然 是对界面进行设置,其代码为: 后再加上州的名字和报告的名字以及扩展名.html。即: Container contentPane=getContentPane0; String queryBase=getParameter(“queryBase”): contentPane.setLayout(new BorderLayoutO); String query=queryB ̄e+state+ /’+report+".html”; JPanel comboPanel=new JPanelO; 接着我们建立一个URL对象,并且调用openS ̄eamO方法, state=makeCombo(states,comboPane1); 打开到URL对象数据输入流。 ’ report makeCombo(reports,comboPane1); URL url new URL(query); contentPane.add(comboPand,BorderLayout.NOKTH); BufferedKeader in=new BufferedKeader(new InputStreamKeader(ud.openStreamO)); 收稿日期:2006-05-07 52 f 2006年第10期 

维普资讯

责任编辑:姚翌 网络技术 该方法的剩余部分是用于读取信息,删除HTML标记,并且 将该信息放入文本域中。 String line; 一个外观非常出色的Web页时,与执行很有趣或者很有用的操 作的applet进行交互操作,并且完全不知道该applet在其它线程 中执行的操作。所以浏览器将拒绝applet对本地计算机上文件进 行的所有访问。 while((1ine=in.readLine0)l=nul1) weather.append(removeTagsOine)+“\n”); 那么为什么applet不能读取第三方Web服务器上的文件 其中:removeTa O方法用于删除HTML标记,它的代码为: public static String removeTags(String s){ while(true){ int lb=s.indexOf(‘<’); if(n)<0)return s; int rb=s.indexOf(‘>’,lb); if(rb<O)retum s: s=s.substring(0,lb)+…’+s.substring(rb+1); 呢?Web服务器难道不是公众可以获得信息的数据库,每个人都 能够从中读取信息的吗?如果你在家里通过服务提供商浏览 Web信息,情况确实如此。但是,当你在办公室里进行工作时,情 况就不相同了。因为许多公司都在他们的计算机的前面设置了防 火墙。防火墙实际上是一台计算机,用于过滤进出企业内部网的 信息。该计算机将拒绝人们访问安全历史上记录不佳的服务,如 许多FTP工具存在一些已知的安全漏洞,所以防火墙将拒绝接 受匿名FTP访问请求或者将它们转向某个隔离的FTP服务器。 它也可能拒绝接受对除了邮件服务器之外的所有计算机上的邮 件端口的访问请求。根据有关的安全原则,防火墙还可以对企业 } } 但是当我们试图运行该applet时,无论是通过appletviewer 查看器还是通过浏览器,它们都将拒绝运行该applet程序。每当 我们点击Get report按钮时,都会产生一个安全违规事件。为什 么会产生这个违规事件呢? 网与因特网之间传输的信息执行过滤原则。 应该让防火墙允许公司使用web来分配员工感兴趣的企业 内部信息,但是又不应该让公司外面的人访问这些信息。该公司 只需要建立一个Web服务器,将地址只告诉它自己的员工,并且 对防火墙实施程序控制,以拒绝外部人员对该服务器进行的任何 2 applet程序的安全问题的讨论 web浏览器和appletviewer都只允许applet程序在支持该 applet的主机上读取和写入数据。Applet程序只能打开连接到该 applet来自的计算机上的网络套接字(Socket)。为什么会有这些局 限性呢?即我们的applet程序为什么会拒绝接收来自第三方 WEB服务器(http://iwin.nWS.noaa.gov/iwin/)的数据呢?为了说明 造成这种情况的原因,我们先介绍与此相关的3个主机的情况, 即: 访问。这样公司的员工就能够使用他们已经知道的和实际使用的 Web工具来浏览公司内部的信息。 如果公司某个员工访问你公司的Web页,applet将被下载到 防火墙后面的计算机中,并且开始在那里运行。如果该applet能 够通过浏览器阅读所有的Web页,那么它将拥有对该企业内部 信息的访问权。这时它就可以打开一个与第三方(通常是防火墙 外的主机)主机的连接,并且发出所有的内部信息,这对该企业的 信息来说显然是不安全的。由于浏览器不知道哪些Web页可以 公开,哪些Web页是机密的,所以它干脆就拒绝对所有Web页 的访问。 原始主机:将web页和Java applet传递给客户机的计算机; 本地主机:运行着你的applet程序的用户计算机; 第三方服务器:你的applet程序希望查看的第三方数据存储 库。 Applet的安全原则规定:applet只能在原始主机上读取和写 这样我们就无法编写一个applet,以便访问第三方Web页, 取得信息,再对信息进行处理和格式化,并将格式化后信息展示 给applet的用户。如我们的applet程序WeatherApplet.java并不将 任何信息写同到它的第三方主机。为什么浏览器不让该applet完 成这些事件呢?如果applet承诺不将信息随意写回到任何地方 去,那么它应该能够从所有地方读取信息,这样它将成为一个信 息的接收者和处理者。 入数据。Applet不能将数据写入本地主机。这是因为如果applet 能够将数据写入本地主机,那么applet就能够将病毒植入本地计 算机或者修改本地计算机里面的重要文件。当用户偶然打开我们 的web页时,applet便立即在本地计算机上运行,如果用户的计 算机没有受到保护的话,就有可能遭到恶意的或者不完美的 applet的损害。 问题是浏览器无法将读请求与写请求区分开来。当你要求在 URL上打开一个数据流时,这显然是一个读请求。不过也不一 定,如下面这个URL: http://www.rogue.com/cgi—bin/cracker.pl?Garys+password+ is+Sicily Applet不能从本地计算机上读取数据。这是因为如果允许的 话,applet便能够浏览本地计算机上的文件,查看敏感信息,然后 打开与原始主机之间的套接字连接,并且将敏感信息写同到原始 主机,这样就有可能造成本地计算机上的数据丢失。例如你打开 这里造成问题的根源是CGI机制,该机制用于接受任意的 参数并且对这些参数进行处理。负责处理CGI请求的脚本程序 聋税与田蟹≯2006毒.嘉10凝 

维普资讯

网络技术 确实能够存储请求访闽的数据。它能够很容易地将信息 隐藏在CGI查询文件中。 那么浏览器是否应该拒绝所有的CGI查询,并且只允许访 责任编辑:姚翌 代码解释程序,Java字节代码解释程序的一D选项则负责设置系 统属性值,这里是将系统属性java.securiy.tpohcy设置为包含该程 序的安全许可权的策略文件的名字。 如果我们想在浏览器中运行该applet程序,那么我们必须对 它进行签名登记,然后还要让运行该程序的浏览器执行以下操 作:对签名进行确认、协商要求的特许权(这一步实际上可以不 做) 具体过程为: javac WeatherApplet.java:编译类文件; jar cvf WeatherApplet.jar★.class:将所有的类文件压缩为jar 文件; 问普通的Web页呢?这也没有那么简单,问题在于浏览器没有办 法知道它连接到的端El 80(HTTP端口)上的服务器实际上是不 是个标准的HTTP服务器。它有可能只是个shell程序,负责保存 对某个文件的所有访问的请求,并且返网一个HTML页说:“对 不起,你请求访问的信息并不存在”,然后该applet可能通过假装 从下面这个URL那里读取信息,从而将信息发送出去: http://www.rogue.com.Garys/password/is/Sicily 由于浏览器无法将读请求与写请求区分开来,因此它必须同 时拒绝这两种请求。 总之,通过以上讨论知道:applet是在浏览你的Web页的计 一keytool—genkey—keystore acmesofi.store~alias acmesofi:创建 个密钥库acmesofi.store并用别名acmesofi生成一个密钥对。这 时要求输入口令,该口令一定要记牢,以后要用到它。该命令要求 输入一系列的选项,我们可以直接按回车即可; keytool—export—keystore acmeso ̄.store—a/is acmesoft—falie 算机上运行的,但是它只能连接到为web页提供服务的原始计 算机上。 acmeroot.cert:生成一个证书文件:acmeroot.cert; 3通过安全策略文件使applet程序能够 keytool——import——keystore cert.store——alias acmesof ̄——file acmerooL 访问第三方Web服务器 从applet安全规则得知:applet只能在原始主机上读取和写 入数据,只能建立到原始主机的网络套接字的连接。本文提供的 cert:将证书文件acmeroot.cert添加到密钥库cert.store中; jarsigner—keystore aclneso ̄.store WeatherApplet.jar acm ̄ofi: 用证书库中的私有密钥对jal"文件WeatherApplet.jar进行签名。 接着编辑策略文件,必须将你的密钥库的位置纳入该文件 中.并将别名添加给一个或多个grant子句中,最后的策略文件 为: applet程序似乎不能执行,但Java 2的安全管理器给我们提供了 一种可能的机制,即我们可以通过安全策略文件使applet程序能 keystore“file:cert.store”,‘‘JKs”; grant signedBy‘‘acmeroot” 够得到访问第三方web服务器的权利。下面我们就来讨论它们。 Applet程序不能访问第三方Web服务器的原因是:applet浏览器 {permission java.net.SocketPermision “iwin.nws.noaa.gov:80”,“connect”; 对它不信任,所以applet浏览器没有赋予它访问第三方web服 务器HTTP端口的权利。但我们这里可以通过安全策略文件给 该applet程序强制赋予这个权利。安全策略文件包含一系列授权 }; 我们称它为WeatherApplet.pohcy。当然由于我们是要用 Intemet Explorer运行.所以在相应的html文件中要加入 archive=“WeatherApplet.jar”标记,最后的html文件我们记为: WeatherApplet.html。这样当我们在Intemet Explorer下运行 WeatherApplet.html时就不会出现任何异常现象,顺利地连接到 第三方web服务器上。并获得相应的数据。 语句,每个语句包含一系列权限,应授予特定保护域中的代码,保 护域是指从同~来源装入的由同一签名者签名的所有类的集合。 本文中applet程序的安全策略文件内容为: grarlt {permission java.net.SocketPemfission “iwin.nws.noaa.gov:80”,“connect”: 总之,本文讨论了Java applet程序的安全规则,使大家知道 了applet不能访问第三方Web服务器的原因.并通过安全策略 文件给该applet程序一个访问第三方web服务器的许可权,使 }; 我们把该文件称为WeatherApplet1.pohcy。这个特殊的策略 文件的内容是很容易理解的,它就是为该applet赋予一个特殊的 许可权,以便产生一个连接到第三方主机iwin.nws.noaa.gov的端 得我们可以通过Java applet程序来获取特定web服务器上对社 会公开的信息。我们的运行环境为:Windows XP Java SDK 1.5, 在运行时,所需的文件最好在同一目录下。 参考文献 …1( ̄)John Zukowski著,邱仲潘等 ̄Java 2从入到精通【M】,电子 工业出版社.2000. 口80上网络套接字。现在我们可以通过以下命令行来启动applet 查看器: appletviewer-J—Djava.security.policy WeatherApplet1.policy WeatherApplet1.html 来运行包含本文的applet程序的网页文件:WeatherApplet1. 『2(2] ̄)Joseph L.Weber著, 照斌、段来盛等 ̄Java 2编程详解【M], 电子工业出版社.2001. html。该applet查看器的-J选项负责将命令参数传递给Java字节 54 聋税与|露蟹》2006 10 


本文标签: 信息 文件 程序 计算机 访问