【问题标题】:How to extends the class java.security.SecureClassLoader?如何扩展类 java.security.SecureClassLoader?
【发布时间】:2009-03-09 12:38:33
【问题描述】:

我想编写自己的 ClassLoader。作为 Applet 的默认 ClassLoader,它应该更快、更动态。

但我不知道我应该如何实现该方法:

PermissionCollection getPermissions( CodeSource codesource )

如果 CodeSource 中存在有效证书,超级实现也不授予任何权利。

我必须自己验证证书还是它已经从 Java VM 验证并从用户那里接受?

【问题讨论】:

    标签: java security classloader


    【解决方案1】:

    Sun PlugIn 和 WebStart 覆盖 getPermissions 以检查签名并与用户确认他们是否希望接受证书。这是一个实现细节,将来可能会发生变化。

    【讨论】:

    • 当你说这是一个实现细节时,你是在谈论围绕 SecureClassLoader 实例而不是 getPermissions 方法本身的 Sun 插件和 Webstart 行为,不是吗?
    【解决方案2】:

    如果我错了,请纠正我 - 我认为您想要的是在您的小程序初始化的某个地方创建一个类加载器,然后使用该加载器加载您的后续类。如果是,则该小程序已经被授予所有权限,因为它已被签名(并且假设用户单击了浏览器警告)。您的 getPermissions 方法可能如下所示

        PermissionCollection p = new Permissions();
        p.add(new AllPermission());
        return p;
    

    【讨论】:

    • Yes 和 No. 带有 classLoader 的 jar 文件已被接受并拥有所有权利。这对其他 jar 文件无效。可以操作此文件。这将是一个安全漏洞,无需检查即可接受所有内容。
    • 没错——但自定义类加载器本身就在受信任的 jar 中——所以如果它已被授予所有权限,从逻辑上讲,这些权限应该“流向”它加载的类。但我明白你的意思——文件只能通过破解 JRE 插件本身来操作。
    • 就像将这些类的恶意版本放在父加载器(即插件加载器)中。但这也意味着客户端机器被入侵了。
    猜你喜欢
    • 2020-06-22
    • 2013-03-30
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多