你能对一个Java小程序进行签名,但将其保留在沙箱中(不给它对用户计算机的完全访问权限)吗?

2022-09-02 01:48:33

由于Oracle的最新更改,即使我不需要或不希望它对用户计算机进行无限制的访问,我似乎也必须对小程序进行签名(这就是为什么它目前未签名的原因)。特别是,我不希望他们为签名的小程序显示警告:

此应用程序将不受限制地运行,这可能会使您的计算机和个人信息面临风险。

...这会吓到使用它的人。

是否可以对小程序进行签名,但以某种方式对其进行标记,以表示“但继续使用沙盒”?

我签署它的唯一原因是,从版本7更新40开始,Oracle进一步增加了用户在运行未签名的小程序时必须处理的唠叨。过去,你可以勾选一个框,说你信任一个小程序一次,那会被记住。截至更新40,它只在浏览器会话中被记住;如果您关闭浏览器并稍后再回来,则警告会再次出现。他们还表示,他们将在Java插件的“未来版本”中完全禁用未签名的小程序。


答案 1

是的,可以。这个页面显示了如何做到这一点(好吧,大部分;你还需要这个页面)。有两个主要步骤:

  1. 将 和 属性放在清单文件中:PermissionsCodebase

    Permissions: sandbox
     Codebase: *.myserver.com

    这些新属性是在 Java 7 Update 25 中引入的,将在此处进行讨论。上面链接的第一页只是显示,但大多数网站都希望上面的通配符。(我不知道沙盒小程序是否需要该属性,但对于大多数签名小程序来说,这似乎是一个好主意。Codebase: myserver.comCodebase

    然后在构建 jar 时使用该清单文件,例如:

    jar cvfm YourJarFile.jar your_manifest_file.txt classes_and_such

    这些属性最终将出现在清单中。jar 中的 MF 文件,它告诉 Java 运行时保持小程序沙盒。

  2. 在标记中,您必须指定参数,如下所述<applet>permissions

    <applet code='yourAppletClass' archive='YourJarFile.jar'>
         <param name="permissions" value="sandbox">
     </applet>

    如果没有第二步,则会阻止在 jar 中请求沙盒权限但未请求标记的已签名小程序运行,并显示一个标题为“应用程序无法运行”的对话框,并给出“原因:请求仅在沙盒中运行的 JAR 清单”。

如果您执行上述两个步骤,则用户会收到一条更令人放心的消息(并且可能小程序保持沙盒状态):

此应用程序将以有限的访问权限运行,旨在保护您的计算机和个人信息。

...如果他们选中了信任发布者和位置的相关复选框,则当他们下次打开浏览器并运行您的小程序时,他们不会再次看到它。


(在提出这个问题的过程中,我找到了答案,但由于答案不在Stack Overflow上,我想我会继续发布问题和答案


答案 2