在java中,包含操作系统级命令的包是什么?

时间:2010-09-07 16:55:17

标签: java operating-system java-io

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

4 个答案:

答案 0 :(得分:1)

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

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

  • 对于基类,您必须小心java.lang.Runtimejava.lang.Systemjava.lang.ProcessBuilder。这些创建java.lang.Process。此外,java.io.Filejava.io.FileDescriptor甚至套接字和java.nio.*也可以在操作系统/文件系统上运行。

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

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

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

答案 1 :(得分:0)

java.lang.Runtimejava.lang.System中提供了大部分操作系统互动功能。请注意,这些不需要导入,因为它们位于java.lang包中。

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

更长的答案:程序员可以编写自己的JNI函数,与操作系统交互并将它们放入他喜欢的任何软件包中。试图找出这个可能非常棘手。好吧,我想你可以说任何“原生”功能都会自动被怀疑。