我知道这听起来像个愚蠢的问题,但是如果您可以访问私有媒体资源并更改它们,您的API有多安全?
答案 0 :(得分:10)
当人们可以将门打开时,锁上门有什么意义?使用反射需要更多技能和更多努力。在大多数情况下,代码很好。无论如何,反射在非完全信任环境中效果不佳。
答案 1 :(得分:6)
在不支持反射的语言中,总是有可能通过直接内存访问来绕过API。
封装不是为了保护您的API免受滥用,而是隐藏可能发生变化的代码部分。如果客户端代码使用官方界面 - 在这样的更改后它将继续工作。如果没有,那么这个代码的作者只是拍了拍他的脚。
答案 2 :(得分:4)
嗯,至少在.NET中,您可以使用disallow reflection
.NET permissions.此外,类和类成员中可见性级别的目的不仅是访问安全性。它也是一种组织和记录代码的方法:当你看到一个私人成员时,你知道它不打算在课外使用,虽然也许你可以通过反射使用它,你通常不会这样做可能会在您的应用程序中导致意外行为。
无论如何,我发现这个问题有点像“如果我能用足够大的锤子粉碎它们,那么门锁的目的是什么?” : - )
答案 3 :(得分:1)
这是对的,它不是完全安全的,但反射也非常有用。但是你仍然只能设置一个属性,如果它有一个setter,所以它并非都是“坏”。
答案 4 :(得分:1)
尽管反射非常有用,但它被认为是一种改变属性的间接方法,而不是一种应该由API认可或支持的方法。
话虽如此,通过设置私有财产,确保那些通过正常方式
访问它的人不会改变它答案 5 :(得分:1)
使用私有属性与没有它的反射相同,但如果考虑使用反射来访问第三方类中的私有成员,他应该非常肯定知道他做了什么 - 而且他肯定知道这可以打破可操作性。
答案 6 :(得分:1)
您可以通过安装SecurityManager来阻止访问私有媒体资源。因此,如果您需要它,您可以真正使其成为私有(并付出代价:某些第三方库将不再起作用)。
与法律一样,private
是价格标签。他们说“如果你不遵守我所施加的规则,就要付出代价。”这并不意味着你必须遵守规则(就像禁止杀人一样不会阻止谋杀)。