【问题标题】:Injection Methods/Variables: public or Not?注入方法/变量:公开还是不公开?
【发布时间】:2010-11-08 23:45:03
【问题描述】:

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

我们知道,如果可以,最好将方法声明为非公开的。话虽如此,如果我没记错的话,允许这些框架访问非公共成员仅适用于默认的 Java 安全管理器。不是说自定义代码也可以通过调用 setAccessible() 的反射获得对非公共成员的访问权限,会危及安全

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

【问题讨论】:

标签: java security spring jpa


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-07-21
      • 2017-09-16
      • 1970-01-01
      • 2017-12-25
      • 1970-01-01
      • 1970-01-01
      • 2020-01-16
      • 2019-06-07
      • 1970-01-01
      相关资源
      最近更新 更多