1

我想指定java.security.AllPermission在我的计算机上运行的某些小程序(用于调试和安全测试)。但是,我不想让我运行的所有小程序都拥有此权限。所以,编辑我的用户 Java 策略文件(我通过测试确保它是正确的策略文件),我尝试输入这个值:

grant codeBase "http://host_where_applet_lives/-" {
 permission java.security.AllPermission;
};

当小程序尝试做一些强大的事情(在我的例子中创建一个新线程)时,这个值会失败。但是,当我输入以下值时:

grant {
 permission java.security.AllPermission;
};

小程序能够执行强大的操作。唯一的区别是缺少codeBase属性。

对此处提出的类似问题的回答 [1] 似乎暗示(但从未显示或证明)AccessController.doPrivileged()可能需要调用。对我来说,这听起来是错误的,因为当我向所有小程序授予权限时我不需要该调用(我展示的第二个示例)。即使这是一个解决方案,在我运行的小程序中乱扔垃圾AccessController.doPrivileged()也不是一件容易的事,也不一定是可能的。最重要的是,我的测试表明这无论如何都行不通。但我很高兴听到更多关于它的想法。

[1]无法为 Intranet 小程序配置 AllPermission。任何人都可以帮忙吗?

4

1 回答 1

1

您引用的类似问题的答案表明,从 JavaScript 调用 Java 小程序代码可能会导致 a SecurityException,因为AccessController它将执行堆栈检查并由于不受信任的 JavaScript 而失败。我尝试了代码,果然,Firefox 不会在没有调用的情况下运行由 JavaScriptdoPrivileged()调用的小程序,但 Safari 会(至少在 Mac OSX 上)。

如果您从 JavaScript 调用您的小程序,您可以尝试使用该Applet.paint()方法来自动调用您的小程序。或者,您可以使用该doPrivileged()方法来缩短堆栈检查,并为自己提供所需的任何特权。当然,任何不受信任的代码都可以调用您的特权代码。

于 2010-05-13T19:20:42.733 回答