注射方法/变量:公开还是不公?

时间:2010-11-08 23:45:04

标签: java security spring jpa

许多Java框架允许将用于注入的类成员声明为非公共。例如,Spring和EJB 3中注入的变量可能是私有的。 JPA允许持久化类的属性受到保护或包私有。

我们知道如果可以,最好将方法声明为非公开。话虽这么说,如果我没有弄错,允许这些框架访问非公共成员只能使用默认的Java安全管理器。是不是意味着自定义代码也可以通过调用setAccessible(),来破坏安全性来通过反射访问非公共成员?

这引出了这个问题:在设置注入方法的访问级别时,最佳做法是什么?

2 个答案:

答案 0 :(得分:2)

通常,类需要选择加入持久性机制。例如,Java serialisatoin需要一个类来实现java.io.Serializable。实施Serializable的类是负责确保它们是安全的。如果一个库允许通过外部配置文件戳私有,那么这不应该被信任 - 反射真的很危险并且它的使用通常搞砸了。

当然,如果您确实发现了漏洞,请将其报告给相应的小组。

答案 1 :(得分:1)

如果您在与应用程序相同的JVM中运行不受信任的代码,并且您正在使用默认的安全管理器设置,那么,这可能是一个安全漏洞。这是你需要注意的事情,但在实践中,这种情况非常罕见。