2014-12-30 92 views
6

我正在創建一個允許用戶執行上傳的Java文件的應用程序。我試圖限制他們可以用安全管理器做什麼。一個空白的政策文件會是最嚴格的,不允許他們儘可能做到嗎?這是否會限制他們做任何基本的事情,我不應該限制他們?空白的Java安全策略文件是最嚴格的嗎?

+0

你想限制什麼? –

+0

任何可能有害的東西。安全經理似乎是通過允許權限來操作的,所以如果您根本不允許任何權限,我不確定限制什麼。 – Greg

+0

定義'空白安全管理器'。 – EJP

回答

5

是的,不授予權限的安全策略是您可以使用標準Java安全管理器定義的限制性最強的策略,並且會阻止在該JVM中運行的代碼執行任何需要安全權限的任何代碼。在允許在安全管理器下運行的代碼執行任何可能有害的任何事情之前,Java核心API通常會檢查各種安全權限,因此從理論上講,在未授予權限的情況下運行不受信任的代碼是安全的。

有一些例外情況:例如從系統類路徑加載的代碼被允許調用System.exit(),這將停止您的應用程序,並且運行時沒有權限的代碼仍然可以創建任意數量的新線程,鎖定系統。如果擔心這些問題,則需要考慮編寫自定義安全管理器。

在你的情況下,如果你在同一個JVM中運行你的應用程序代碼和用戶提供的代碼,你需要給你的應用程序代碼權限來做它需要做的事情,同時授予對不可信代碼的權限,所以你需要添加類似下面給你的政策文件:

grant codeBase "file:path/to/trusted/application/jars" { 
    permission java.security.AllPermission; 
}; 

要知道,如果你在命令行指定的政策文件,你需要使用雙等號(例如 - Djava.security.policy ** == ** policy.file),否則您的策略將擴展默認的Java安全策略,這將授予所有代碼的最小權限集。