1

在 PHP 中,我创建了一个包含私有声明变量的类。

class testClass {
   private $_db_name = 'test_db';
   private $_db_user = 'test_user';
   private $_db_pass = 'test_pass';
}

意外的是,在实例化类之后,我在print_r我设置的变量上运行了 a 并将这些私有变量打印到屏幕上。

$test = new testClass();
print_r($test);

回报:

testClass Object
(
    [_db_name:testClass:private] => test_db
    [_db_user:testClass:private] => test_user
    [_db_pass:testClass:private] => test_pass
)

这对我来说有点担心。如果我在我的服务器上打包了一个包含敏感信息的类,以供其他人包含和使用,而无需访问密码等,他们可以简单地转储这些。我是否在这里遗漏了一些重要的东西来防止这种行为发生?有没有更好的方法来处理对象中的敏感信息?

4

2 回答 2

1

将成员设置为私有并不意味着您查看它的方式的安全性(即隐藏敏感数据)。它只是针对使用扩展类或整个应用程序中的成员的其他人(开发人员)的安全性。

并不是为了保护数据不与不应该看到它的人共享。如果您不希望其他人能够看到它,请不要将其包含在其他人正在使用的代码中。

长话短说。可见性只是为了防止初级开发人员搞砸或弄乱你的代码。;-)

于 2013-03-12T16:38:36.340 回答
0

如果他们可以访问 PHP 代码,他们就可以访问其中的所有内容。print_r您可以通过不将它们声明为变量而是将其处理来防止它出现在函数中final public function __get($prop)

final public function __get($prop) {
  switch ($prop) {
    case "_db_name":
     return 'test_db';

  }

  return $this->$prop; //this also works on all private vars, so you might want some extra checking.
}

但是话又说回来,如果我可以添加您的包裹,require('your/package/file.php')那么是什么阻止我echo implode('', file('your/package/file.php'));看到它?

于 2013-03-12T14:29:39.580 回答