繁体   English   中英

从未签名的 Javascript 调用时,如何获得已签名的 Java Applet 以执行特权操作?

[英]How can I get a signed Java Applet to perform privileged operations when called from unsigned Javascript?

已签名的 Java Applet 与在客户端上运行的普通 Java 应用程序具有相同的安全许可。 对于特定项目,我需要这些权限,并且我需要执行特权操作作为 JavaScript 调用的结果。

现在,问题是,至少对于 Firefox 3 in Ubuntu(目标浏览器和平台),当通过未签名的 JavaScript 调用小程序方法时,它会失去其特殊权限。 由于签署 JavaScript 不是一种选择,我需要一种方法来解决此限制。

实现此目的的一种方法是在小程序启动时创建一个线程,并在主线程收到 JavaScript 调用时调用该线程上的方法。 我已经实现了这个想法的工作原型,但我发现它有点笨拙,因为它使用了太多的反射并且不像我想要的那样容易重用。

是否有一种通用的标准方法来做我想做的事情? 而且,如果我的想法是 go 的正确方法,那么您 go 如何以可重用的方式实施它? 我想要实现的是一个框架,它允许将这种“在特权线程中运行方法”的东西用于各种对象。 理想的、乌托邦的解决方案是这样的:

// when the applet starts-up
PrivilegedExecuter priv = new PrivilegedExecuter(myObject); //or MyClass.class
// ...
// inside a JavaScript-called method (myObject has myMethod)
priv.myMethod(); // myMethod is run synchronously in a privileged thread

使用 java.security.AccessController class。

有一个 doPrivilegedAction 和 doPrivilegedExceptionAction 可以完全满足您的需要。

例如:

AccessController.doPrivileged(new PrivilegedAction() {
            public Object run() {
               .. do something that only works with signed applets ..
            }
        });

值得补充的是:让你的 privaction'd run()方法尽可能小和独立。 显然,您可以让已签名的 applet 的 init() 方法调用特权run() ,后者反过来执行实际的 applet,但这只是在乞求被滥用、意外误用或彻底利用。

此外,签名的小程序在被 JavaScript 调用时会失去其特殊权限这一事实并不特定于特定的浏览器或平台。 它就是这样,无处不在,无时无刻不在。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM