我们使用访问修饰符来限制用户对受保护/私有变量的访问,但用户怎么可能尝试访问它们呢?

Posted

技术标签:

【中文标题】我们使用访问修饰符来限制用户对受保护/私有变量的访问,但用户怎么可能尝试访问它们呢?【英文标题】:We use access modifiers to limit the user access to protected/private variables, but how could the user even attempt to gain access to them? 【发布时间】:2020-05-03 21:00:23 【问题描述】:

例如,如果开发人员正在创建桌面应用程序甚至 Web 应用程序。用户如何利用对本应受保护/私有但被声明为公共的变量/方法的访问权限?

【问题讨论】:

【参考方案1】:

您可以搜索此主题:API 了解更多信息。可以访问您的代码的不是普通用户,而是第 3 方。

【讨论】:

好吧,假设您的程序或系统提供接口,以便其他系统可以与它通信或按原样使用它。另一个端点现在有权使用这个接口来做这个接口完全允许的事情。如果您的设计没有访问修饰符,那么此端点可以深入您的组件并更改组件的状态和属性。这有帮助吗? 我可以看出这是一个漏洞。如果存在任何公开的端点都没有设置的公共变量怎么办,端点请求仍然是主要漏洞吗? 我不能很好地理解你的观点,但无论如何你不能信任任何端点,只要它不是你系统的一部分。你必须保持你的状态一致和安全。【参考方案2】:

一般普通用户无法访问程序的内部功能。只有当您故意公开它们时,普通用户才能访问它们。 private/protected 和 public 的使用主要用于封装目的。这限制了类和库的内部状态的访问点数量。

更高一点的是模块访问,以防实现模块系统。这列出了可以从其他模块访问的(公共)方法。除此之外,您还可以通过例如远程访问远程过程调用或 Web-API。这些也需要暴露。

最后是用户界面。用户界面通常无法访问程序的公共功能。仅提供通用输入/输出。当然,您仍然必须确保不暴露任何内部状态。缓冲区溢出、RAM 攻击等可能使用户完全跳过上述措施提供的所有保护。

因此,公共/私有可能是限制对程序内部状态的访问的好方法。但这些访问修饰符一般不是第一道防线。

【讨论】:

以上是关于我们使用访问修饰符来限制用户对受保护/私有变量的访问,但用户怎么可能尝试访问它们呢?的主要内容,如果未能解决你的问题,请参考以下文章

实例变量修饰符

java中interface不能用啥修饰符来修饰

php curl - 需要使用 curl 提供对受保护目录的访问权限

201771010106东文财《面向对象程序设计(java)》 实验7程序附加题

java 访问修饰符

java-访问权限