为什么Java告诉我我的applet包含有符号和无符号代码?

时间:2010-04-09 14:48:20

标签: java security applet mixed-code

我签名的Java applet在Java更新19之前一直运行良好。现在Java Update 19上的一些但并非所有用户都报告了一条java安全消息,指出我们的applet包含有符号和无符号代码。

创建applet的过程如下:

  1. 在Netbeans IDE中清理并构建applet项目。
  2. 在WinRAR中打开Applet jar文件,并将所需的mysql JDBC驱动程序.class文件添加到jar文件中。
  3. 签署applet jar文件。
  4. 有人可以告诉我如何确定签名的代码以及我们的applet中没有签署的代码?有没有更好的方法将mysql JDBC驱动程序jar文件包含在我们的applet中,而不是将jar文件内容复制到我们的applet jar文件中?

    由于

3 个答案:

答案 0 :(得分:14)

编辑:由于Java 7 Update 45中的错误,您不应将Trusted-Library添加到清单文件中。只需添加新属性Caller-Allowable-Codebase。有关详细信息,请参阅此问题:Java applet manifest - Allow all Caller-Allowable-Codebase

Java 7 Update 21于2013年4月16日发布,导致我们的applet开始显示此警告对话框。

根据发行说明: 从JDK 7u21开始,调用特权applet中代码的JavaScript代码被视为混合代码,如果签名的JAR文件未使用Trusted-Library属性标记,则会引发警告对话框。

要解决此问题,请编辑manifest.mf文件并添加如下所示的行:

Trusted-Library: true

尽管如此,你应该非常小心。如果您可以通过javascript调用已签名的applet,则恶意用户可能会在用户的计算机上执行有害操作。

保护applet的一种快捷方法是阻止它在其他网站上运行。通过将代码放在查看init()的{​​{1}}方法中,并在与您的网站不匹配时抛出异常来执行此操作。

Java 7 Update 25引入了另一种限制可以运行applet的站点的方法。您可以在清单文件中设置Codebase属性,如下所示:

getCodeBase().getHost()

Java 7 Update 45(2013年10月16日发布)引入了对LiveConnect系统(javascript-to-applet桥接器)的更多更改,这些更改可能会导致另一个提示。本文讨论了7u45的变化:https://blogs.oracle.com/java-platform-group/entry/liveconnect_changes_in_7u45

基本上,您还需要将以下内容添加到清单文件中以避免提示:

Codebase: test.example.com www.example.com

如果您销售的产品包含小程序,并且您不知道可以部署哪些域,则可以填充*。

答案 1 :(得分:11)

有些事情要尝试:

  • 转到java插件控制面板($ JAVA_HOME / bin / ControlPanel)。
  • 转到Advanced标签。
  • 展开Debug
  • 检查Enable tracingEnable loggingShow applet lifecycle exceptions
  • 展开Java console
  • 检查Show console
  • 点击OK(或Close,具体取决于您的操作系统)

当你的applet加载时,Java控制台将会打开。单击它并立即按“5”。它将记录正在获取的jar和类以运行您的applet。在这里的某处应该有一条消息,表明哪些罐子或类被认为是“无符号的”。如果你第一次错过它,只需重新加载窗口再试一次。

答案 2 :(得分:2)

将受信任和不受信任的代码混合在一起是一个已在6u19中修复的漏洞(撰写本文时的当前CPU / SSR版本)。 See the docs.阻止混音或使用调试器应该显示问题所在。