0

我想检测给定程序是否可以执行诸如分叉、进程间管道、输入/输出重定向、文件处理等恶意操作。实际上我正在开发一个检查 java 代码的程序,并且不希望编码器损害我的代码检查器系统以任何方式。
我应该在代码中寻找哪些包来确保这一点?
提前致谢... !

4

4 回答 4

1

您的检查是在编译时还是在运行时?

  • 如果您在运行时检查,您可以使用具有权限的安全管理器。看看安全管理器教程。有一个广泛的权限列表。您可以禁止文件访问,甚至是打开的框架。

  • 至于基类,你必须小心java.lang.Runtimeand java.lang.System, java.lang.ProcessBuilder。这些创建java.lang.Process. 此外java.io.File,,java.io.FileDescriptor甚至可能是套接字并java.nio.*在操作系统/文件系统上运行。

  • 我也不允许反射,java.lang.reflect.*并且一些方法java.lang.Class也是反射的。按名称加载类可能会解决您的检查问题。中的一些类java.beans.*也使用反射。

  • 根据您的需要,您甚至可能希望用户代码在沙箱中运行。但这对你来说可能太过分了。检查类使用情况(常量池)可能是一种简单的方法。

  • 正如 Colin HEBERT 之前指出的那样,native也很危险。但其中一些是绝对需要的,比如Object's 方法。

于 2010-09-07T17:04:16.630 回答
0

您应该考虑检查所有标记为“本机”的方法。

于 2010-09-07T17:02:56.973 回答
0

简短的回答:java.lang。我相信这是唯一一个“开箱即用”的包,其中包含可让您访问操作系统功能的类。好吧,我在这里假设您没有将 I/O 包括为“与操作系统相关”的东西。如果你这样做了,那么你还必须包含 java.io、javax.swing 和其他几个包。

更长的答案:程序员可以编写自己的与操作系统交互的 JNI 函数,并将它们放在他喜欢的任何包中。试图确定这一点可能非常棘手。好吧,我想您可以说任何“本机”功能都会自动受到怀疑。

于 2010-09-07T17:05:31.930 回答
0

许多操作系统交互功能在java.lang.Runtime和中提供java.lang.System。请注意,这些不需要导入,因为它们在java.lang包中。

但是......如果你只是分析代码,你为什么要关心它包含什么调用呢?也许您应该查看Java 安全性而不是调用哪些类。

于 2010-09-07T16:58:31.963 回答