2010-03-24 61 views
3

我可以使用定製的SecurityManager避免第三方代碼創建新線程,啓動新虛擬機或泄漏數據嗎?SecurityManager是一個完整的安全解決方案嗎?

+1

..啓動新的虛擬機? – Roman 2010-03-24 15:43:47

+2

是的,使用例如'Runtime.exec'。 'SecurityManager'可以用來限制外部進程的執行。 – Bombe 2010-03-24 16:31:25

+0

任何圖靈完整的語言都可以創建一個虛擬機,並且你無能爲力......我估計OP只是想禁止運行任何**外部程序。 – 2010-08-30 00:11:08

回答

3

線程創建導致致電securityManager.checkAccess(g),其中gThreadGroup。這又需要SecurityConstants.MODIFY_THREADGROUP_PERMISSION

創建新的JVM實例的唯一方法是啓動一個新進程。這將需要SecurityConstraints.FILE_EXECUTE_ACTION

因此,如果您的SecurityManager引發了這兩種權限的異常,則會涵蓋前兩種情況。

您需要確定什麼構成「泄漏數據」。是否擔心意外或故意泄漏?關注不受信任的代碼訪問數據,或不受信任的代碼的數據可以被其他線程,類等訪問?

2

你當然可以做前兩件事。但是,我不確定「泄漏數據」的含義。

請注意,您不需要自定義的SecurityManager,您只需要一個自定義策略文件。

+0

但是不是最終用戶修改被動策略文件嗎? – 2010-03-24 17:14:43

+0

我真的不明白這個問題的含義。 – james 2010-03-24 19:20:37

3

沒有什麼是完整的安全解決方案(除非你問銷售人員)。

我想說SecurityManager可以控制所有這些(正如你所說的,你不一定需要一個自定義的安全管理器,你可以簡單地通過一個策略來配置很多)。控制線程,處理執行,強制訪問私人數據和網絡連接(第三方應用向競爭對手發送私人數據等) - 這就是SecurityManager的用途。

但是,您需要權衡您需要多少安全。考慮到對於每個Java安全更新,Sun都會在Java安全沙箱中修復3-4個漏洞(Java 6u15 as an example)。這些更新每年發生大約3-4次(或者拿走,不知道甲骨文收購將如何做)。因此,這些〜12年的任何漏洞都可能導致您的數據泄露。

如果我的祕密對其他人非常有價值,我個人不會相信SecurityManager來控制在我的環境中運行的潛在惡意第三方代碼。 (我沒有寶貴的祕密,我已經不相信在SecurityManager下我的瀏覽器中運行Java的行爲。)

+0

原來的問題說「出口」而不是「泄漏」。這似乎意味着問題是不受信任的代碼是否可以發佈它可以從外部訪問的數據。事實證明,擺脫互聯網上的所有祕密渠道是有點棘手。 – 2010-03-24 22:53:21

+0

我明白了。閱讀(另一個)Tom的其他問題。如果他擔心最終用戶更改政策文件,我可能會誤解他的情況。 – 2010-03-25 16:07:23

相關問題