我想检测一个给定的程序是否可以执行恶意操作,如分叉,进程间管道,输入/输出重定向,文件处理等。 其实我正在开发一个程序来检查java代码,并且不希望编码器损害我的代码检查系统以任何方式。
我应该在代码中查找哪些软件包以确保这一点?
在此先感谢...!在java中包含操作系统级别命令的包是什么?
回答
许多OS交互功能都在java.lang.Runtime
和java.lang.System
中提供。请注意,这些不需要导入,因为它们位于java.lang
包中。
但是,如果你只是分析代码,你为什么会在乎它包含什么调用?也许你应该看看Java Security而不是调用哪些类。
您应该考虑检查标记为“本机”的所有方法。
您的检查是在编译时还是在运行时?
如果您在运行时检查,可以使用具有权限的安全管理器。看看Security Manager Tutorial。有一个广泛的权限列表。您可以禁止文件访问,甚至打开框架。
至于基础类,你必须要小心
java.lang.Runtime
和java.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
的方法。
简短回答:java.lang。我相信这是唯一“开箱即用”的软件包,其中包含可让您访问操作系统功能的类。那么,我假设你没有将I/O作为“OS相关”的东西。如果你这样做,那么你还必须包含java.io,javax.swing和其他一些包。
较长的答案:程序员可以编写自己的JNI函数,与操作系统进行交互并将其放入任何他喜欢的包中。试图找出这可能是相当棘手。那么,我想你可以说任何“本地”功能都是自动怀疑的。
- 1. 内核内存在Windows操作系统中包含什么?
- 2. 如何在操作系统级别解释Unix命令
- 3. 为什么JavaScript不能将命令发送到操作系统级别?
- 4. UDP数据包在操作系统级别被拒绝?
- 5. 在Windows操作系统中的pathos软件包操作系统
- 6. 在php中包含函数覆盖的级别是什么?
- 7. 命令行安装Mongo,无论操作系统是什么
- 8. Python操作系统命令
- 9. 什么是操作系统和元操作系统之间的差别
- 10. 操作系统注入和操作系统命令注入的区别
- 11. 这是什么操作系统和UI工具包?
- 12. 在Java中跟踪操作系统级别的窗口事件
- 13. 在所有操作系统上是否包含java可运行的C++代码?
- 14. 在操作系统中执行命令的Java
- 15. 为什么sed命令包含符号
- 16. 如何在JUnit中正确包含Android操作系统类test
- 17. 什么是MQ系列的命令级别?
- 18. Java中的'系统默认包'是什么?
- 19. 升级包含什么MSI
- 20. 在使用java的ATM上,什么是操作系统?
- 21. 在x86和x64位操作系统中包含另一个jar包
- 22. 什么是融合位置提供商的最低Android操作系统级别
- 23. 作为操作系统的一部分或不包含的应用程序 - 有什么区别?
- 24. 运行操作系统命令的JSP
- 25. 在spec文件中,我添加了操作系统,因此生成的RPM包含操作系统和arch?
- 26. 在操作系统中,系统调用和中断有什么区别?
- 27. 什么是本地操作系统
- 28. 如何使用Java获取操作系统级别的信息?
- 29. 检测操作系统级别的引发事件(操作系统外观)
- 30. SIMD操作环境下的非包装和包装指令有什么区别?
+1提及反思。你可以使用反射来调用你在其他类中提到的方法。还有其他一些类,例如'java.beans',它允许间接地相对自由地使用反射。 – 2010-09-07 17:09:18