2009-08-25 48 views
7

使用正在運行應用程序服務器進程的用戶的權限保護Java Web應用程序是否足夠,還是使用SecurityManager和合適的策略文件合理嗎?我應該在Java Web應用程序中使用安全管理器嗎?

我曾經做過前者,而不是後者,但有些客戶希望我們也使用SecurityManager,它會明確授予每個第三方組件的權限,以確保沒有任何潛在的惡意代碼。

我見過一些Servlet容器,如Resin建議不要使用SecurityManager來減慢速度。有什麼想法嗎?

回答

9

儘管我不想推薦使用而不是使用安全功能,但我認爲SecurityManager更多用於管理JVM中執行不可信或第三方代碼的情況。考慮小應用程序或託管的共享應用程序服務器方案。如果你完全控制了應用服務器,並且沒有運行其他人的代碼,我認爲這是多餘的。根據我的經驗,啓用SecurityManager確實會對性能產生重大影響。

+0

在我們的例子中,第三方代碼是各種已知的OS庫。檢查每行代碼以檢查是否存在任何潛在的「不良」代碼是相當多的工作。我信任這些庫,但我們的客戶有點偏執:) – Kaitsu 2009-08-25 11:55:57

+0

在你說你沒有運行其他人的代碼之前,你需要小心。例如,如果您解析XML,但可以使用XML外部實體(XEE)攻擊,但大多數人會說這只是數據。 – bgiles 2010-09-28 21:02:32

1

對於您的問題,沒有簡單的是/否回答,因爲它確實取決於:您想要保護什麼,以及您想要保護什麼?

例如,我使用SecurityManager來實現IP過濾,並只允許列入白名單的IP地址連接到我的應用程序。如果您只是想禁止訪問磁盤文件,可能以更低權限運行應用程序是更好的解決方案。

如果您完全不信任第三方插件,請記住,一旦允許執行插件代碼,即使您使用SecurityManager,該插件也可能會導致應用程序崩潰。如果您的應用程序加載插件,可能是白名單插件,並在加載插件之前檢查列表是更好的解決方案。

如果您決定使用它,您將會受到性能影響(因爲JVM將執行更多檢查),但運行速度取決於執行檢查的代碼/配置。我的IP白名單相當快,因爲​​它只包含單個列表查詢;如果你的檢查包括調用遠程Web服務和訪問數據庫,你可以減慢很多事情的速度,但另一方面,如果你有足夠的硬件和很少的併發用戶(換句話說,如果你能負擔得起),即使這不重要, 。

1

正確地在java中配置安全管理器可能很困難。例如,如果您不限制安全管理器本身,只需將安全管理器設置爲空即可繞過所有安全性。

使用安全管理纔有意義,如果你的JVM運行不可信代碼,否則它是一個痛苦的成立,因爲你必須預先知道什麼權限應爲每個功能(例如設置:RMI ,套接字,I/O)和每個客戶端。

相關問題