是不是足以确保与运行应用程序服务器进程或者是合理的也是使用的SecurityManager用合适的政策文件的用户的权限的Java Web应用程序?
我已经习惯了做前者,而不是后者,但有些客户希望我们还可以使用安全管理器,将明确授予权限,以每个第三方组件,以确保没有任何邪恶的代码潜伏在那里。
我见过一些Servlet容器,像树脂提出不使用安全管理器慢的事情了。 有什么想法吗?
是不是足以确保与运行应用程序服务器进程或者是合理的也是使用的SecurityManager用合适的政策文件的用户的权限的Java Web应用程序?
我已经习惯了做前者,而不是后者,但有些客户希望我们还可以使用安全管理器,将明确授予权限,以每个第三方组件,以确保没有任何邪恶的代码潜伏在那里。
我见过一些Servlet容器,像树脂提出不使用安全管理器慢的事情了。 有什么想法吗?
虽然我讨厌曾经建议不使用安全功能,这是我认为了SecurityManager更预期管理,不受信任的或第三方代码在JVM中执行的情况。 想想小应用程序,也可以是托管,共享应用程序服务器方案。 如果你有在应用服务器完全控制,并没有运行任何其他人的代码,我认为这是多余的。 启用安全管理器确实有在我的经验显著的性能影响。
有没有简单的是/否回答你的问题,因为它实际上取决于:你想要什么,以稳妥,你想从保护它呢?
例如,我使用安全管理器来实现IP过滤,只允许白名单中的IP地址连接到我的应用程序。 如果你只是想禁止访问磁盘文件,可能运行的应用程序与较低权限的用户是更好的解决方案。
如果你不信任第三方插件可言,记住,一旦你允许的插件代码执行,该插件可以,如果要,即使你使用安全管理器崩溃您的应用程序。 如果您的应用程序加载的插件,也许白名单的插件和检查列表之前加载插件是更好的解决方案。
如果你决定使用它,你将采取的性能损失(因为JVM会做更多的检查),但如何快速将运行真的取决于你的代码/配置,将做检查。 我的IP白名单是蛮快的,因为它仅包含单列表查找; 如果你的检查包括调用远程Web服务和数据库访问,你可以慢下来了很多,但在另一方面,即使是,如果你有足够的硬件和少数并发用户不应该的问题(换句话说,如果你能负担得起) 。
正确使用Java configurin安全管理器能吃苦耐劳。 举例来说,如果你不限制安全管理器本身,一个可以只通过设置安全管理器为空绕过所有安全性。
使用安全管理才有意义,如果你的JVM运行不受信任的代码,否则它是一个痛苦的成立,因为你必须知道你应该为每个要素事先设定的权限(例如:RMI,插槽,I / O ),并为每个客户端。