外部课程访问包
假设我在包org.jake
有一个类,并且它有一个默认访问方法(没有修饰符)。 然后该方法仅在包内可见。
然而,当有人收到我的框架的jar时,是什么阻止他们写一个新类,将它的包声明为org.jake
,并使用我所谓的隐形方法?
换句话说,我能做些什么来防止这种情况发生?
你可以在你的jar文件中封装这个包。 但它不是防弹的。
最重要的是不要依赖访问修饰符等,从安全的角度来看,真的。 如果有人以不受限制的权限运行代码,他们将可以访问所有类型的东西。 访问修饰符的确有助于阻止人们意外地在脚下自己拍摄。
如果有人愿意在你的软件包中放置课程来规避你的封装,他们显然无视你的最佳意图 - 我说让他们继续下去,但不要为这种情况提供支持。
没有什么可以做,以防止这种情况。 即使私人成员也可以通过反思访问。 你应该考虑java中的访问修饰符只是提示性的。
首先,这是“DRM”情景:最终,有足够的决心可以通过提供时髦的修改后的运行时或其他类似的东西来击败任何保护措施。 相反的场景 - 运行时是可信的,但一些包不是 - 通过使用合适的ClassLoader
限制由Java正确处理,但只有在可以以可信的方式强制实施限制的情况下才可以工作; 这就是为什么你的方案基本上注定要失败。
然而, 如果我们假设运行时本身是可信的,那么你可以在你的超级秘密方法中尝试获取当前正在执行的堆栈的堆栈跟踪(请参阅stackoverflow.com/questions/1069066/...)以及测试以查看当前方法的调用者是否是您信任的访问者。 安全管理人员会更加合适,但是你不能相信环境能够安装你喜欢的那一个(它在攻击者的控制下更加清楚)。 请注意,我没有尝试过这一段中的选项!
另一种选择是将您的秘密放在您控制的服务上,并且只提供远程访问。 或者不要再担心使用技术机制来处理基本上涉及商业和法律问题的问题(例如,你为什么要与不信任的人打交道?)
链接地址: http://www.djcxy.com/p/82417.html上一篇: Outside classes accessing package
下一篇: Getting different results for getStackTrace()[2].getMethodName()