当前位置: 首页 > 面试题库 >

Java 7u4 Webstart安全例外:类与信任级别不匹配

吕学
2023-03-14
问题内容

我们开始注意到,在Java 7(尤其是更新4)中,我们所有的用户都开始通过Webstart应用程序看到此信息:

[14:42:58,422] AWT-EventQueue-0(DEBUG) java.lang.SecurityException: class "CLASSNAME" does not match trust level of other classes in the same package
[14:42:58,422] AWT-EventQueue-0(DEBUG) at com.sun.deploy.security.CPCallbackHandler$ChildElement.checkResource(Unknown Source)
[14:42:58,422] AWT-EventQueue-0(DEBUG) at com.sun.deploy.security.DeployURLClassPath$JarLoader.checkResource(Unknown Source)
[14:42:58,422] AWT-EventQueue-0(DEBUG) at com.sun.deploy.security.DeployURLClassPath$JarLoader.getResource(Unknown Source)
[14:42:58,422] AWT-EventQueue-0(DEBUG) at com.sun.deploy.security.DeployURLClassPath.getResource(Unknown Source)
[14:42:58,422] AWT-EventQueue-0(DEBUG) at java.net.URLClassLoader$1.run(Unknown Source)
[14:42:58,422] AWT-EventQueue-0(DEBUG) at java.net.URLClassLoader$1.run(Unknown Source)
[14:42:58,422] AWT-EventQueue-0(DEBUG) at java.security.AccessController.doPrivileged(Native Method)
[14:42:58,422] AWT-EventQueue-0(DEBUG) at java.net.URLClassLoader.findClass(Unknown Source)
[14:42:58,422] AWT-EventQueue-0(DEBUG) at com.sun.jnlp.JNLPClassLoader.findClass(Unknown Source)
[14:42:58,422] AWT-EventQueue-0(DEBUG) at java.lang.ClassLoader.loadClass(Unknown Source)
[14:42:58,422] AWT-EventQueue-0(DEBUG) at java.lang.ClassLoader.loadClass(Unknown Source)...More

其中CLASSNAME =应用程序执行中的几个jar中随机出现的几乎每个类,破坏了几种行为。如果我们的用户使用Java
6,他们将没有问题!只有7个(更新4个)。我们签名所有的jar,包括主应用程序jar和库jar。即,启动我们的Webstart应用程序的用户看到的是蓝色的盾牌,而不是黄色或红色的盾牌。

这显然是一个问题,因为用户现在更频繁地升级到Java7。我试图通过使用先前的html" target="_blank">安装(工作)或安装新的安装来强制我们的应用在用户计算机上使用Java
6。在资源周围使用j2se version =“ 1.6”标签,但这会导致它自己的问题,最好将其纳入自己的线程中(auto-jre-
installation部分)。

Oracle是否通过Java 7u4破坏了Webstart的安全性?如何解决这个securityexception问题?


问题答案:

只是jarsigners hack的原始作者签入。我是由另一个与我最初共享该hack的开发人员指导的。

根据他对此的持续调查,您需要将以下内容添加到对hack的调用中

callNoArgMethod("getSigningData", jar);
makeHardLink("signingDataRef", jar);

callNoArgMethod("getManifest", jar);
makeHardLink("manRef", jar, n);

清单调用不是此帖子解决方案的一部分。他们是在创建接受测试以重现该问题时发现的。

基于此新信息,我们已更改了方法,现在使用反射来调用所有“ get”方法(如果尚未填充软引用,则必须首先调用get方法来填充软引用)

然后反省地发现CachedJarFile类中的所有软引用,并为其创建硬链接。

只要CachedJarFile保留在原位,而hack的基本前提仍然成立,这将在将来证明该解决方案不受其他内部重命名/重构的影响。(即:将软引用转换为硬引用。



 类似资料:
  • 问题内容: 当我编译下面的Python代码时,我得到 与任何外部缩进级别都不匹配 为什么? 问题答案: 其他海报可能是正确的…选项卡中可能混有空格。尝试进行搜索和替换,以所有空格替换几个空格。 尝试这个:

  • 在我的应用程序中,用户可以拍照或向应用程序添加照片。当应用程序尝试在ImageView中显示保存的图像时,我会收到java.lang.SecurityException的崩溃报告 错误所在的线路是 我无法在我的设备或模拟器上复制错误,它们都能很好地显示图像。 我使用的完整代码是 我的设备上显示的日志输出(3个项目,一个没有图像) 项目:测试-已解析:file:///storage/emulated

  • 我们在hello-world-test的基础上,我们新建了一个名为method-security的 Gradle 项目。 本项目用于演示方法级别的安全设置。 build.gradle 修改 build.gradle 文件,让我们的method-security项目成为一个新的项目。 修改内容也比较简单,修改项目名称及版本即可。 jar { baseName = 'method-securi

  • 问题内容: 信任安全吗?是否可以通过更改请求标头或类似的内容来代替? 这样写安全吗? 问题答案: 是的,这很安全。它是TCP连接的源IP,不能通过更改HTTP标头代替。 您可能要担心的一种情况是,如果您在反向代理后面,则REMOTE_ADDR将始终是代理服务器的IP,而用户IP将在HTTP标头中提供例如X-Forwarded-For。但是对于正常使用情况,读取REMOTE_ADDR是可以的。

  • 问题内容: 以下变量用法之间的区别是什么 VS 如果我们在一个班级中只有一个“ b”,那么哪个是更好的做法以及为什么。在什么情况下应该使用谁。 问题答案: 这些实际上有非常不同的含义。在情况1中,在构造时分配对象。它只能被构造一次(除非您是在课堂以外的地方重新分配它)。 在情况2中,您将在每次调用该方法时重新分配实例。

  • 20道单选+10道不定项 两道算法: 算法题只能用c/c++写 1. 给一个由大小字母组成的字符串,长度小于260个,求首次唯一出现的字符,要求不使用任何库函数。 eg: nnasflk 输出就是a 这一题我不知道怎么理解这个题意,最后只过了50% 2. 给一个正整数N,求[1,N] 中出现2的个数和,例如N=2那么答案就是1,N=13答案就是2 这题我用的数位dp,但是不知道为什么也没有ac 参