博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

tomqq & security

网络安全/IDS/SSL-VPN/WEB技术/java/
  tomqq.cublog.cn

关于作者
姓名:tomqq
职业:挨踢的
位置:成都
个人介绍:2004年毕业于四川大学计算机应用专业,硕士学历,毕业后一直从事IDS和SSL-VPN的研发至今。Email:hekong@gmail.com

|| << >> ||
我的分类


设计支持多os的ssl-vpn客户端(五)——如何突破applet沙箱安全性限制

设计支持多os的ssl-vpn客户端(五)
——如何突破applet沙箱安全性限制
Tomqq 6/17/2008

我们知道,Applet是在所谓的沙箱模型里面运行的,要想用它来做任何事,那么首先就要突破沙箱限制。
VPN客户端是需要操作本地文件的,也需要启动socket连接和侦听,这都处于沙箱安全允许的范围之外。要解决这个问题,首先要对applet进行签名,具体怎么签名,可以百度一下,这里不在赘述;签名后的applet即不受沙箱限制,可以做任何事情了。值得注意的是,在这里,最好把逻辑运算放在applet以外的代码里面实现,因为applet本身具有生命周期的限制,随着页面的变化applet也会执行相应的生命函数,不利于逻辑流程的控制。标准做法就是新开一个线程,运行相应的逻辑运算。
当在页面产生一个点击事件,比如点击了一个卸载按钮,消息流程这样子的:js把页面点击消息传递至applet插件,插件进行相应的操作,比如执行卸载脚本。但是这样子就会出权限问题,因为applet没有权限直接执行本地命令,要达到目的,只能是交给另外一个进程去做,我是这样子实现的:
增加一个命令队列,用于存放需要执行的命令;另外实现一个命令执行线程,这个线程启动后就进入循环,只要命令队列里面有需要执行的命令,就会循环去取命令并执行命令,否则进入wait();
Js把需要执行的命令传给applet以后,aoolet把这个命令放入命令队列,然后唤醒执行线程,执行线程来执行这个页面传递来的命令,如:
c_command c = new c_command(2,cmd_id,param);//type = 2
  global_cq.add_command(c);
    synchronized(waitPerson) {
           waitPerson.notify();
       }
绕了一圈,原来就是解决这个问题,稍微有点晦涩,不过也没有更好的办法。

 

发表于: 2008-06-18,修改于: 2008-06-18 16:48,已浏览71次,有评论0条 推荐 投诉


网友评论
 发表评论