2011-04-23 36 views
1

在另一個question上進行了對話之後,引發了一個有趣的問題。可以用sun.misc.unsafe破壞一名水銀經理嗎?

加載安全管理器的類受到相應安全性的保護。這種安全性可以禁止反射(例如)。

問題是:是否可以用sun.misc.unsafe打破安全管理器?如果是,如何?

編輯

問題改SecuredClassLoader到安全管理。

回答

2

不需要。sun.misc.Unsafe類需要訪問檢查,就像其他任何特權操作一樣。您可以使用自定義類加載器或安全管理器來阻止它。這裏有一個空的安全管理一個簡單的例子,說明它會拋出一個AccessControlException

System.setSecurityManager(new SecurityManager()); 
Unsafe unsafe = Unsafe.getUnsafe(); 
+0

這個傢伙忘了提到代碼是在最終用戶(可能是黑客)的機器上執行的。我相信它改變了整個遊戲......有點;) – 2011-04-23 02:49:23

+0

是的,我同意改變整個遊戲。我只是回答這個具體問題,並將其他部分留給其他問題:) – WhiteFang34 2011-04-23 02:58:09

+0

@road到yamburg因此,我們已經確定,當在受控服務器和桌面應用程序上運行代碼時,情況並不相同。 – JVerstry 2011-04-23 02:59:19

1

什麼是「安全類加載器」? SecureClassLoader的?儘管有其名稱,但並不安全。它所做的只是將類加載源限制到特定的代碼位置。

因此,您甚至不需要任何不安全的操作來「破壞」該操作。舉個例子,在SecureClassLoader甚至獲得控制權之前,確保替換的被黑客入侵的類在類路徑中。

該線程中的某個人已經告訴您 - 您在不安全的環境中無法獲得安全位置。如果你的代碼被部署到用戶機器上,那麼用戶就是上帝,沒有JVM安全性可以幫助你,因爲JVM是一個非常強大的本地事物上的一個小層。

+0

即使機器可信計算設施,如記憶的簾幕,等等? ;-)(哦,等等,我知道沒有JVM的實現可以使用任何TC功能。) – 2011-04-23 02:34:56

+1

傘兵排在用戶肩上嗎?不,Java還沒有這個功能呢! :D – 2011-04-23 02:47:33

+0

我編輯了這個問題。您正在提高關於用戶計算機上的類路徑+部署中被黑客入侵的類的好處。 – JVerstry 2011-04-23 02:48:27