在C#、Java和其他编程语言中,类、属性或方法的访问修饰符实际上对应用程序的安全性有影响吗?它们是否在某种程度上防止未经授权的访问?还是只是用于清晰和正确地编程的工具?
在C#、Java和其他编程语言中,类、属性或方法的访问修饰符实际上对应用程序的安全性有影响吗?它们是否在某种程度上防止未经授权的访问?还是只是用于清晰和正确地编程的工具?
不,访问修饰符并不提供安全保护。它们仅为开发人员方便而存在,例如它们有助于实施良好的编程实践和编程模式。
在Java/C#和其他语言中,使用反射可以轻松访问原本无法访问的修饰符。
访问修饰符的主要目的是强制实现特定的设计,而不是任何形式的安全性。
在安全方面,了解你要保护的内容是非常必要的。要有一些关于你的威胁模型的想法。
因此,访问修饰符对于处理移动代码的Java 2安全模型绝对至关重要。例如,如果不受信任的人可以清除java.lang.System.security
字段,那么就结束了(更新:我相信该特定示例不再适用,但原则仍然存在)。访问修饰符通过直接引用和运行时安全检查防止非法访问,即使通过反射访问也是如此。
在其他情况下,这只是关于代码质量。软件安全漏洞几乎都是由于质量差的代码造成的,尽管有所有“我们认真对待安全”的借口。因此,访问修饰符在各个方面都发挥着作用。