我需要创建一个运行第三方代码的桌面应用程序,我需要避免从应用程序以任何方式(Web,剪贴板,文件io)信息导出第三方代码。
Somethig喜欢:
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的内容,但我仍然不确定处理此问题的最佳方法是什么。
我应该阅读有关执行此操作的内容?
答案 0 :(得分:2)
首先,你几乎无法阻止本地计算机上的每一个信息泄露。你当然可以限制网络访问,甚至可以限制很多文件系统访问,但没有什么可以阻止gui弹出一个对话框,在屏幕上向用户显示信息,或任何其他100种方式你可以“泄漏”数据
其次,您一直在谈论用户可以更改的策略文件。是的。听起来你基本上是在尝试重新创建DRM。我建议阅读有关DRM及其普遍无用的内容。它基本上归结为给某人一个锁定的盒子和盒子的钥匙并告诉他们不要打开它。如果某人对您的程序有物理访问权限,那么几乎没有什么可以阻止他们从中获取数据,使用java或几乎任何其他编程语言(至少,不是在今天构建的计算机上)。 / p>
答案 1 :(得分:1)
一般的方法是使用安全策略运行您的jvm,该安全策略将java.security.AllPermission授予您的代码库(即jar),并且不对第三方代码库授予任何权限。以下是关于如何使用策略文件以及将什么放入所述文件的documentation。