2010-09-07 39 views
0

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

回答

0

许多OS交互功能都在java.lang.Runtimejava.lang.System中提供。请注意,这些不需要导入,因为它们位于java.lang包中。

但是,如果你只是分析代码,你为什么会在乎它包含什么调用?也许你应该看看Java Security而不是调用哪些类。

0

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

1

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

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

  • 至于基础类,你必须要小心java.lang.Runtimejava.lang.System,java.lang.ProcessBuilder。这些创建java.lang.Process。还有java.io.File,java.io.FileDescriptor,甚至可能是Sockets和java.nio.*在OS /文件系统上运行。

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

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

  • 正如Colin HEBERT之前指出的那样,native也是危险的。但其中一些肯定是需要的,如Object的方法。

+0

+1提及反思。你可以使用反射来调用你在其他类中提到的方法。还有其他一些类,例如'java.beans',它允许间接地相对自由地使用反射。 – 2010-09-07 17:09:18

0

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

较长的答案:程序员可以编写自己的JNI函数,与操作系统进行交互并将其放入任何他喜欢的包中。试图找出这可能是相当棘手。那么,我想你可以说任何“本地”功能都是自动怀疑的。

相关问题