2010-03-24 60 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

相关问题