PHP - 公众可见度不太安全吗?

时间:2016-11-25 20:01:02

标签: php security visibility

我曾经质疑一位老师为什么习惯将财产的可见性设为私人或受保护的人。她回答我说这比公开更安全,但我对这个答案并不是很有信心。所以,我想知道,即使我确保最终用户无法操纵我的类,公共财产对于属性真的不太安全吗?为什么?

4 个答案:

答案 0 :(得分:7)

不,那是绝对的垃圾。它没有多少或更不安全。

如果用户想要,他们可以访问对象上的受保护/私有属性:

class Car {
    protected $engine = 'V8';
}

$reflector = new ReflectionClass('Car');
$engineProperty = $reflector->getProperty('engine');
$engineProperty->setAccessible(true);

$maserati = new Car;
echo $engineProperty->getValue($maserati); // echoes "V8"
$engineProperty->setValue($maserati, 'I4');
echo $engineProperty->getValue($maserati); // echoes "I4"

因此,可以证明,没有安全上的好处。

它的好处是它可以通过标记类为其设计的类与哪些函数和属性进行交互来帮助最终用户。开发人员可以根据需要完全改变类的内部,但是调用它的代码不会改变。如果他们真的想要,那么班级的用户可以用它来捣乱,但如果事情不起作用就会出现问题!

答案 1 :(得分:2)

这与安全性无关。 封装可能是您/您老师正在寻找的词。

请参阅What is encapsulation? How does it actually hide data?

答案 2 :(得分:2)

公共财产本身并不像其他答案所指出的那样安全或不安全。但是,拥有许多公共属性可间接导致应用程序安全性降低。例如:

具有许多公共属性的类更难以推理,因为这些属性可以由代码的任何其他部分操纵,而不仅仅是由他自己的方法操纵。这样,整个应用程序的安全性就变得难以管理。

换句话说:公共属性可以带来更大的attack surface

答案 3 :(得分:0)

继承是另一个受封装影响的领域。

通常通过扩展具有子类的基类来向应用程序添加新功能。受雇从事软件项目的新开发人员通常使用其他开发人员创建的类的公共方法。

如果一个方法被错误地声明为public,那么它可以被未来的开发人员覆盖