2012-04-13 51 views
0

我編寫了一個簡單的RMI應用程序。我發現客戶在獲得RMI註冊後可以成功執行Registry.unbind()方法。這在我看來是一種安全風險。爲什麼允許客戶端解除遠程註冊表中的名稱綁定?一個邪惡的人可以通過修改代碼來做到這一點,並且我的所有其他客戶端都不能連接到我的服務器,因爲綁定已被刪除。如何拒絕客戶解除RMI註冊表的綁定?

是否有可能否認這一點,也許在Java政策?

回答

1

這隻有在客戶端與註冊表運行在同一主機上時纔會發生。如果您遇到自己的客戶存在安全問題,那麼您將面臨比RMI能爲您解決的任何問題更大的問題。

0

Javadoc爲註冊地:

一個註冊表實現可以選擇限制訪問它的方法部分或全部 (例如,方法是變異註冊表的 綁定可能被限制在從始發呼叫本地主機)。 如果某個註冊表方法選擇拒絕某個給定調用的訪問,則其實現可能會拋出AccessException,該異常將在遠程客戶端捕獲 時拋出一個ServerException異常(因爲它將 擴展爲RemoteException)。

如果您這樣選擇(實際上是大多數註冊表實現的默認行爲),您可以選擇阻止此行爲。