【问题标题】:Best approach to create a security environment in Java在 Java 中创建安全环境的最佳方法
【发布时间】:2010-03-25 13:23:58
【问题描述】:

我需要创建一个将运行第三方代码的桌面应用程序,并且我需要避免第三方代码以任何方式(Web、剪贴板、文件 io)从应用程序中导出信息。

有点像:

public class MyClass {

    private String protectedData;

    public void doThirdPartyTask() {
        String unprotedtedData = unprotect(protectedData);
        ThirdPartyClass.doTask(unprotectedData);
    }

    private String unprotect(String data) {
        // ...
    }

}

class ThirdPartyClass {

    public static void doTask(String unprotectedData) {
        // Do task using unprotected data.
        // Malicious code may try to externalize the data.
    }


}

我正在阅读有关 SecurityManager 和 AccessControler 的信息,但我仍然不确定处理此问题的最佳方法是什么。

我应该阅读什么来执行此实现?

【问题讨论】:

    标签: java security


    【解决方案1】:

    首先,您几乎无法阻止本地计算机上的所有信息泄漏。你当然可以限制网络访问,甚至很多文件系统访问,但是没有什么可以阻止 gui 弹出一个对话框,在屏幕上向用户显示信息,或者任何其他 100 种你可以“泄露”的方式数据。

    其次,您一直在谈论可由用户更改的策略文件。是的。听起来您基本上是在尝试重新创建 DRM。我建议阅读 DRM 以及它的一般无效性。它基本上归结为给某人一个上锁的盒子和盒子的钥匙,并告诉他们不要打开它。如果有人可以物理访问您的程序,那么您几乎无法阻止他们从其中获取数据,使用 java 或几乎任何其他编程语言(至少,不是在今天构建的计算机上)。

    【讨论】:

    • 那么SecurityManager和AccessControl是干什么用的?
    • 用于保护您(用户)正在运行代码并且您不信任它(代码)的代码。您正在尝试保护您(代码/程序员)不信任 用户 的代码,这本质上是 DRM。
    • 我不能将我视为运行我不信任的代码(第三方代码)的用户并应用此工具(SecurityManager/AccessControl)来保护我的数据安全吗? (并有替代本地策略文件的解决方案)
    • 当然可以。但是您提到的各种事情似乎暗示其他人将运行您的代码,并且您希望保护您的数据免受该人的侵害。
    • 如果我只是实现自己的安全管理器,我可以限制 JDK (java.sun.com/javase/6/docs/technotes/guides/security/…) 中的所有现有权限。我什至可以用 AWT 权限取消显示在屏幕上的数据。但我正在寻找一种不那么硬编码的解决方案。
    【解决方案2】:

    一般的方法是使用安全策略运行您的 jvm,该安全策略将 java.security.AllPermission 授予您的代码库(即 jar)并且对第三方代码库没有任何权限。这里有一些 documentation 关于如何使用策略文件运行以及在所述文件中放入的内容。

    【讨论】:

    • 我已经阅读了一些内容,但策略文件不是用户更改的被动文件吗?所以第三方开发者可以更改文件,不是吗?
    • 如果第三方代码没有读写文件的权限,则不,不能修改文件。
    • 我的意思是用户本身,在其操作系统上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 2017-04-21
    • 2013-07-22
    相关资源
    最近更新 更多