访问修饰符(public、私有、内部、受保护)的安全影响

Security impact of access modifiers (public, private, internal, protected)

执行属性或[=的访问修饰符 C#中的13=]methods、Java等编程语言其实对应用程序的安全性有影响吗?他们是否也以某种方式防止未经授权的访问?还是它们只是清晰和适当编程的工具?

访问修饰符的主要目的是强制执行特定设计,而不是任何类型的安全。

不,访问修饰符不提供安全保护。它们只是为了方便开发人员而存在,例如它们有助于实施良好的编码实践并有助于编程模式。

通过在 Java/C# 和其他语言中使用反射,可以很容易地访问原本无法访问的修饰符。

与安全性一样,有必要了解您试图防范的内容。了解您的威胁模型

所以,是的,访问修饰符对于 Java 2 安全模型来说是绝对关键的,用于处理移动代码。例如,如果 untrusted 可以清除 java.lang.System.security 字段,那么到此结束(更新: 我相信具体示例不再有效,但原理仍然存在)。访问修饰符通过直接引用防止非法访问,并且通过运行时安全检查,即使通过反射访问

在其他情况下,它只是关于代码质量。尽管有所有 "we take security seriously" 借口,但软件安全漏洞几乎归结为 质量差的代码 。所以访问修饰符无处不在。