我想檢測一個給定的程序是否可以執行惡意操作,如分叉,進程間管道,輸入/輸出重定向,文件處理等。 其實我正在開發一個程序來檢查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提及反思。你可以使用反射來調用你在其他類中提到的方法。還有其他一些類,例如'java.beans',它允許間接地相對自由地使用反射。 – 2010-09-07 17:09:18