我想檢測一個給定的程序是否可以執行惡意操作,如分叉,進程間管道,輸入/輸出重定向,文件處理等。 其實我正在開發一個程序來檢查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