站内搜索: 请输入搜索关键词

当前页面: 开发资料首页JSP 专题Applet中访问本地资源的安全沙箱问题

Applet中访问本地资源的安全沙箱问题

摘要: Applet中访问本地资源的安全沙箱问题


我用JApplet写一个web中的小程序,需要访问客户机本地资源,所以对包含了applet程序的jar文件做了数字签名处理,具体如下
1.keytool -genkey -keystore test.store -alias test
2.keytool -export -keystore test.store -alias spat -file test.cert
3.Jarsigner -keystore test.store test.jar test
4.做了一个policy文件applet.policy,内容如下
/* AUTOMATICALLY GENERATED ON Fri Sep 08 16:58:51 CST 2006*/
/* DO NOT EDIT */

keystore "file:d:/admin/test.store", "JKS";

grant signedBy "test" {
permission java.io.FilePermission "<>", "read, write, delete, execute";
};
5.在Jre的/lib/security/目录下的java.security文件中相应的位置加了一行policy.url.3=file:d:/admin/applet.policy内容,其中:D:/admin为存放applet.policy的路径

然后用JFileChooser类做了一个打开文件的对话框,如果是直接按以下处理是没有问题的
例如:
JFileChooser fileChooser = new JFileChooser();
fileChooser. showOpenDialog();
并且用弹出的对话框,选择一个文件,还能读入内存,但如果不做数字签名,在执行new JFileChooser()的时候就报出下面错误:
Exception in thread "AWT-EventQueue-2" java.security.AccessControlException: access denied (java.util.PropertyPermission user.dir read)

如果做了数字签名, 调用fileChooser.addChoosableFileFilter(fileFilter)添加了文件过滤器以后,在执行fileChooser. showOpenDialog这个方法的时候,在Console中会报出下面的错误:
Exception in thread "AWT-EventQueue-3" java.security.AccessControlException: access denied (java.util.PropertyPermission user.dir read)

在相应的方法中,如果不弹出带有FileFilter的文件选择对话框,直接做某文件的读写也是可以的;从上面的两种错误来看,我觉得我做的数字签名还是有效的,但就是有的处理可以绕过Java虚拟机的安全沙箱,但是有的处理就不能;不知道是不是还有什么jar文件没有签名,或者其它的问题,说了这么多,想请各位大侠帮我看看具体的原因,急于求救中,还请高手不吝赐教;谢谢!


谢谢哪位大侠站出来帮个忙啊,十分紧急,拜托,谢谢!


应该是需要java.util.PropertyPermission这个权限,你只赋予了文件读些权限,但是没有获得系统属性的权限。所以
grant signedBy "test" {
permission java.io.FilePermission "<>", "read, write, delete, execute";
permission java.io.PropertyPermission "user.dir" "read";
};


我试了一下,应该是java.util.PropertyPermission吧,但还是不行,后来我把这个policy文件中所有的权限都删除,包括java.io.FilePermission的所有权限也删除掉,发现还能读写本地文件,数字签名其他的仍然都做了,感觉这个policy文件没有起作用,或者是我做签名的时候,什么地方做错了?大家都来帮忙想想办法吧,谢谢了,虽然还没搞定,还是非常谢谢elan,继续帮我看看吧!


我试了一下,直接在jre的lib下的java.policy文件中加了一行permission java.util.PropertyPermission "user.dir", "read";就可以了,不过感觉这个办法不太好,如果能用自己的applet.policy就更好了,谢谢,接分!


elan,不好意思啊,分一定会给你的,但是给了分就结了帖,我主要是想再看大家能不能还有点好的建议,后面的哥们,谁能给点意见啊,但是可能不能给分了,谢谢大家了!


↑返回目录
前一篇: 网站首页访问地址问题
后一篇: 奇怪现象之----黑客攻击!!??