为什么java安全管理器不是强制性的?

时间:2018-05-10 10:42:23

标签: java security

java语言的一个好处是我们说它是安全语言。但默认情况下,安全管理器不是强制性的默认情况下,我们可以遇到许多问题,例如使用反射访问私有对象。对它为何如此设计感到困惑,请你就此提出更多要点。

1 个答案:

答案 0 :(得分:1)

  

java语言的一个好处是我们说它是安全语言。

我不同意这个主张:

  • Java不是一种(足够)安全的语言,可以免除程序员对安全性的思考。当然,它不足以在浏览器插件中运行不受信任的代码。我不会称Java为安全语言。

  • 我不相信更多安全对大多数Java应用程序都有好处。

  

但默认情况下,安全管理器不是强制性的。

正确。

  

默认情况下,我们可以遇到许多问题,例如使用反射访问私有对象。

私人可见性从未被设计为安全功能。它是一种强制封装Java“抽象数据类型”的功能;即班级。

允许反射覆盖可见性规则的原因在于,出于实际原因,有时需要必要来打破封装。最常见的是抽象交叉功能,如依赖注入框架,序列化机制,其中封装旨在解决的问题(例如,不需要的耦合)是没有实际意义。

简而言之,对于大多数Java应用程序,我不认为这是一个需要解决的问题。如果应用程序或第三方库以这种方式使用反射,那么可能是一个很好的理由。

现在我接受一些问题域要求比典型的Java应用程序更高级别的安全性。对于他们来说,一定要实现安全管理器......并阻止对私有变量的反射访问。但是,我建议如果您的安全要求需要阻止封装破坏,那么安全管理器不足以解决您必须处理的其他安全问题。

处理硬安全要求的经典方法包括审核您的开发人员和操作人员,对代码库进行独立审计,入侵测试等等......以及空隙。