我是SecurityManager的初学者。我一直在尝试使用Java SecurityManager来沙箱中一些不受信任的代码(应该是非常简单的代码,比如计算权重等)。我使用命令java -Djava.security.manager
来运行.class
文件。
让我感到困惑的一件事是:有人说SecurityManager的默认策略几乎允许每个操作,你需要编写自己的策略来拒绝一些冒险行为(例如从磁盘读取/写入文件);而其他一些人则说违约政策实际上否定了所有冒险行为,如果您需要允许一些冒险行动,您可以为该行动编写自己的政策。
我的问题是:
PS。我其实想要否认所有冒险行为。因此,如果默认策略是拒绝所有冒险行为,我想我将使用默认的SecurityManager。
答案 0 :(得分:3)
默认安全策略非常紧张。您可以在java.home/lib/security/java.policy
grant { ... };
块中未包含的适用于所有域的所有内容(例如java.io.FilePermissions
)未授予您运行的任意代码。
Java安全策略文件不支持'拒绝'配置,仅支持grant
。这就是为什么开始使用相对严格的文件是有意义的,因为用户可以添加用户或应用程序策略文件。
参考:http://docs.oracle.com/javase/7/docs/technotes/guides/security/PolicyFiles.html
答案 1 :(得分:-1)
默认的SecurityManager实现允许调用 JOptionPane.showMessageDialog ,我认为这是冒险操作,因为它会激怒用户。