我们知道Java applet在浏览器中运行时默认情况下是不能访问本地资源的,比如读写客户端电脑上的文件。这是Java的安全沙箱机制,简单说就是有一组安全检查规则,要通过检查之后才能访问特定资源。不过在企业应用中这种安全机制有时候并不是十分必要,这里我们就讨论一下在企业应用中突破沙箱检查的方案。
当然,很多朋友会说,这太简单了,只需要改一下java.policy就可以了,授予程序对所有权限就可以了,就像下面这样:
grant {
permission java.security.AllPermission;
};
没错,这样确实可以使客户端applet有权限访问任何资源,但是这个方案有个很实际的问题:java.policy是位于每个客户端电脑的jre目录下的,如果要修改,那么就需要通知每一个使用该系统的用户,并指导他们做相应操作。这对于搞IT的用户来说是小菜一碟,但对一般业务人员来说却是个额外的工作,这样的发布方式很难被人认可。
另一个方案——对applet进行签名,用户访问时系统会弹出安全提示框,用户如果信任该程序,点击确认就相当于赋予了这个客户端小程序访问本地资源的权限。这是个很典雅的方案,体现了系统安全和对用户权利的尊重!具体做法大致如下:
1、编写applet,编译并打成jar包
2、对jar包签名
这一步首先要产生证书,利用jdk提供的工具,执行类似下面的命令:
keytool -genkey -keystore d:\mykeys.store -alias test -validity 300
根据系统提示执行完这个命令后会生成一个证书库,上例是:mykeys.store,-validity 300是证书有效期为300天的意思,接下来用这个证书库中的证书给jar包签名,仍然是jdk的工具,命令类似下面:
jarsigner -keystore d:\mykeys.store d:\applet.jar test
3、把applet.jar发布到应用服务器
这个看似完美的方案实际也有一点问题,很多时候我们并不希望把客户端程序都打到一个jar包里,那么多个jar包就需要分别签名,每次修改完客户端程序,都要重新打包和签名,不然就只有applet能访问本地资源。我们不想这么麻烦,甚至我们有时都不希望对客户端代码打包,这时候签名就不好实现了。那么如何解决这个问题呢,看下面这招。
既然applet已经被用户授权,那么是否可以在applet里改变安全管理器(SecurityManager)?实验证明是可以的!只需要继承SecurityManager类,创建自己的安全管理器类,然后覆盖checkPermission方法,允许访问任何资源。在applet的init方法中调用System.setSecurityManager把安全管理器设置为我们自己的就一切OK了!
至此,我们彻底突破了沙箱检查,而且客户体验很好,完美的方案!
分享到:
相关推荐
行业分类-设备装置-基于JAVA字节码插桩和JAVA方法挂钩检测JAVA沙箱逃逸攻击
java安全沙箱,具体内容见文档,非常之强大
java-sandbox:这是一个Java沙箱,主要用于试验与CoreJava相关的构造
java沙箱支付宝支付,QQ邮箱发送,短信发送,语音播报,手机短信发送等功能jar以及源码
Java实现支付宝扫码支付完整过程(沙箱测试环境)及其项目源码 项目描述 最近想开发一个关于支付网页的小项目,记录一下自己碰到的坑,这里我是通过Java在支付宝测试环境里面实现支付宝支付完整过程。 运行环境 ...
NULL 博文链接:https://renzaihangzhou.iteye.com/blog/2007855
支付宝沙箱(Alipay Sandbox)是支付宝提供的一个测试环境,用于模拟支付宝支付接口和功能的开发和测试。它允许开发人员在不影响真实支付流程的情况下,进行支付功能的调试、验证和优化。以下是对支付宝沙箱的详细...
java ,c#,delphi 解决flash安全沙箱问题 聊天室
简单的 Java 沙盒,用于尝试和与朋友共享代码。 目前正在研究一些 Java 例子 创造型 抽象工厂 建造者 工厂方法 延迟初始化 多通 对象池 原型 资源获取 单身人士 结构的 适配器 桥 合成的 装饰器 正面...
微信支付沙箱密钥的获取方法有注解,附加一个HttpUtill类,输入正确的参数调用就可以获取的对应的沙箱密钥。
沙箱的原理和分类,主要分为应用级沙箱、内核级沙箱。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...
SpringBoot+Vue支付宝沙箱支付
AS与java socket通讯 解决安全沙箱 服务端用JAVA写的 用其他语言写的服务端 可以参考一下 都差不多的 这是网上COPY的那种方法所改进的,可以运行的。
支付宝 包含对账单下载示例 业务账单 财务账单 阿里支付 付款 交易查询 退款 退款查询 交易关闭 对账单下载 电脑网站沙箱测试(Java)
Java10沙箱我在Java 10中的试用版。编译并运行在收藏夹终端中打开项目并运行以下命令: javac -d "./out/http" $(find . -path \*http/\*.java) javac -d "./out/bootstrap" -p "./out/http" $(find . -path \*...
NULL 博文链接:https://1598623317.iteye.com/blog/2087516
TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,使用java语言开发,带有支付宝沙箱支付功能。 二、功能介绍 如博客中介绍 三、注意事项 1、管理员账号:admin 密码:admin 数据库配置文件DBO.java ,权限包括管理员,...
全面认识Flex安全沙箱 flex4发布后在IE中运行出现的安全沙箱问题。
主要介绍了Java如何在沙箱环境中测试支付宝支付接口,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧