【问题标题】:object oriented programming for security面向对象的安全编程
【发布时间】:2019-08-02 10:54:59
【问题描述】:

在 OOP 中,我们可以将 private、protected 和 public 分配给变量和方法。我知道这有很多优点,但安全性是其中之一吗?这样未经授权的人就不能访问。

【问题讨论】:

  • 没有。 None.
  • 面向对象编程的设计原则与主要基于基于角色的访问控制 (RBAC) 的安全原则具有不同的目标

标签: java oop


【解决方案1】:

简短的回答是“不是真的”。数据仍然在内存中,如果你用反射挖掘你可以得到字段的内容。将字段和方法标记为私有是与其他程序员交流的一种方式:“嘿,这是类的内部工作,容易改变,请不要碰它。”

您可以通过以下方式获取私有字段的值:

// suppose we have a class
Person person = new Person("John");
// Field is from java.lang.reflect.Field
Field nameField = Person.class.getDeclaredField("name");
// tell Java to ignore the private modifier
nameField.setAccessible(true);
// now you can "steal" the private field
System.out.println(nameField.get(person));

除非绝对必要,否则请不要使用这是您的代码,如果您曾经使用反射,请格外小心。

此外,即使该字段无法通过语言设计访问,如果我们在讨论安全性,例如在扫描内存的外部程序中,将字段标记为私有并不会对其隐藏数据。毕竟.. 数据必须在某个地方,对吧?

【讨论】:

  • 感谢您简短而准确的回答。
  • 我在想它将被用于,例如,在银行数据库中。帐户余额设置为私密,因此您无法从外部访问它们。
  • 对于这种安全性,公共/私有模式无济于事。如果您希望系统安全,您必须确保机器上没有运行恶意软件,并启动防火墙,yadayada。
  • @Babydesta 如果您正在用 Java 编写 Web 服务器,并且希望避免泄露客户端登录时使用的明文密码,除了对数据库进行加盐之外,您可能还想查看类似this。只是你可能感兴趣的东西。
【解决方案2】:

这就是oops中的封装原理,也就是信息隐藏。您可以使用访问修饰符来定义类、方法和属性的可见性。

您通过使您的类属性无法从外部访问并通过为其他类可读或可更新的属性提供 getter 和/或 setter 方法来实现此信息隐藏机制。

【讨论】:

  • 我明白了,你说躲起来。那我们为什么要隐藏信息呢?
猜你喜欢
  • 2011-11-14
  • 2010-09-18
  • 2012-05-24
  • 2011-02-24
  • 2011-07-09
  • 1970-01-01
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多