首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安全管理器java停止覆盖

安全管理器java停止覆盖
EN

Stack Overflow用户
提问于 2014-11-20 13:48:40
回答 1查看 777关注 0票数 4

例如,如果我设置了一个安全管理器:

代码语言:javascript
复制
private static class SecManager extends SecurityManager {
...
}

通过以下方式:

代码语言:javascript
复制
System.setSecurityManager(new SecManager());

我可以使用哪个权限(或者更确切地说是防止)来阻止代码在行后面再次设置安全管理器,并提高了权限。

我正在寻找一种方法,比如:

代码语言:javascript
复制
private static class SecManager extends SecurityManager {
    @Override
    public void checkSetSecurityManager(SecurityManager manager){
        throw new AccessControlException("Not allowed to set new security Manager);
    }
 }

但是当然,checkSetSecurityManager并不存在,所以我不确定要查找什么或者如何拒绝该权限。

我想使用安全管理器来允许我运行一些不受信任的代码,但我显然不希望该代码能够设置它自己的安全管理器。我确实考虑过在OS级别(为每段代码创建一个新用户)这样做,但这似乎有点过火了。相反,我运行自己的java,它设置了一个安全管理器,然后在同一个JVM中运行不受信任的代码。我已经确保了他们的代码不能启动新的进程(因为这将绕过安全管理器),但是我需要确保它们不能覆盖现有的安全管理器。

我还使用checkWrite和checkRead来确保代码只能在特定的dir中读写。

任何帮助都是非常感谢的。

谢谢,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-20 13:59:53

以下https://www.securecoding.cert.org/confluence/display/jg/20.+Create+a+secure+sandbox+using+a+security+manager网站对此有如下说明:

如果当前安全管理器执行的当前安全策略禁止替换(通过省略RuntimePermission("setSecurityManager")),任何调用setSecurityManager()的尝试都会引发SecurityException )。

因此,看起来checkPermission()方法是检查这个的地方。

RuntimePermission的Javadoc有一个可能的值列表,以检查是否还应该捕获其他关键方法:https://docs.oracle.com/javase/7/docs/api/java/lang/RuntimePermission.html

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27041182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档