首页 > 解决方案 > 为什么java安全管理器不是强制性的?

问题描述

java 语言的好处之一是我们说它是安全语言。但默认情况下,安全管理器不是强制性的。默认情况下,我们可能会遇到许多问题,例如使用反射访问私有对象。对它为什么这样设计有点困惑,请您提供更多关于此的观点。

标签: javasecurity

解决方案


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

我不同意这个提议:

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

  • 我不相信更多的安全性会对大多数 Java 应用程序有益。

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

正确的。

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

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

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

简而言之,我不认为这是一个需要解决的问题……对于大多数 Java 应用程序。如果应用程序或 3rd 方库以这种方式使用反射,则可能有充分的理由这样做。


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

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


推荐阅读