我正在設計一個系統來加載,處理和支持Java應用程序中的插件。我覺得一個特點是在它可以被部署之前絕對至關重要的是能夠建立一個安全的環境,在這個環境中插件被限制在允許的範圍內。如何安全地實現Java插件安全性?
我不明白如何以編程方式使用政策文件但不運行在推出-Djava.security.manager參數。所以現在就結束了。
我的下一個想法是覆蓋所有我的SecurityManager在誰可以執行他們自己的SecurityManager的子類,地點的限制關心的方法。
的問題,然後大作,只有這樣,才能找出誰是問這個權限是通過線程ID檢查。所以,我設計了一個系統,所有的插件線程都駐留在PluginThreads線程組中。
這工作......直到一切開始爆炸。問題在於一些被封鎖的東西是由Sun的代碼執行的內部操作。
所以即使是最基本的操作,如打開一個窗口,因爲我的保安經理被拒絕訪問Sun的代碼會失敗。這裏使用我的Thread檢查方法是沒有問題的,因爲Sun的代碼是在PluginThreads組內執行的。
所以我需要知道的是:
1)是否有可能是一個辦法,我可以找出其內的呼叫從使用當前線程到來的背景下?
2)有沒有更好的方法來做到這一點,我不知道?
3)如果該方法涉及策略文件,那麼如何將它們加載到代碼中?
4)是否有你能想到的,以防止太陽內部的Java代碼被封鎖任何其他方法?
是的我注意到線程檢查是一個糟糕的處理安全的方式。 AccessControlContext是否不會干擾Sun代碼? – bgroenks
@ ghostsoldier23你的意思是「Java庫代碼不會導致所有acc檢查失敗?」?它全部擁有所有權限。一般來說,庫代碼至少需要權限作爲使用它的應用程序。通常,這意味着該庫具有所有權限,或者將其與應用程序的權限綁定在一起。 –
你是說AppContext是com.sun。*庫的一部分嗎? 「禁止」,「你不能通過」圖書館? ; D – bgroenks