Java 反射安全
如何通过不允许Java 反射安全,java,security,reflection,securitymanager,Java,Security,Reflection,Securitymanager,如何通过不允许方法,字段,构造函数对象调用setAccessible(true)来强制反射安全性?安全策略文件还是其他什么 对于独立Java应用程序,通常不注册SecurityManager 我使用这个System.setSecurityManager(新的SecurityManager()) 这种方法适用于调用方法 我想强制执行整个jar或使用jar的客户机代码是不允许调用setAccessible(true) 还有更好的办法吗 谢谢。嗯,它确实适用于SetAccess。见: class A
方法
,字段
,构造函数
对象调用setAccessible(true)
来强制反射安全性?安全策略文件还是其他什么
对于独立Java应用程序,通常不注册SecurityManager
我使用这个System.setSecurityManager(新的SecurityManager())代码>
这种方法适用于调用方法
我想强制执行整个jar或使用jar的客户机代码是不允许调用setAccessible(true)代码>
还有更好的办法吗
谢谢。嗯,它确实适用于SetAccess。见:
class A {
private String method1() {
return "Hello World!";
}
}
及
导致
Exception in thread "main" java.security.AccessControlException: access denied ("java.lang.reflect.ReflectPermission" "suppressAccessChecks")
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.reflect.AccessibleObject.setAccessible(Unknown Source)
at B.main(B.java:8)
它可能对您不起作用的一个原因是,根据中的注释,它在Java1.5中不起作用,但在Java6及其后的版本中起作用
编辑:要拒绝特定JAR的策略,您需要使用策略文件,例如:
// specific file
grant codeBase "file:/test/path/tools.jar" {
// no permissions for this one
};
// default to giving all
grant {
permission java.security.AllPermission;
};
有两种方法可以指定策略文件,要么将其作为默认值的附加项,要么只指定那些已指定的():
如果你使用
java -Djava.security.manager -Djava.security.policy==someURL SomeApp
(请注意,双等于)则只显示指定的策略文件
使用;安全属性文件中指示的所有内容都将被删除
忽略
…或实现自定义安全管理器,该管理器。不过我自己还没有这样做。似乎也有同样的主题。我想在我的应用程序中强制禁止调用setAccessible方法。@peterwkc是的,我回答说你可以用SecurityManager来做这件事?如何用SecurityManager来做?你是说定制安全管理器吗?@peterwkc不,使用标准的,就像我的例子一样。但您需要使用策略文件或自定义安全管理器来仅针对特定的jar拒绝它。
java -Djava.security.manager -Djava.security.policy==someURL SomeApp