在PHP中,我创建了一个包含私有声明变量的类。
class testClass {
private $_db_name = 'test_db';
private $_db_user = 'test_user';
private $_db_pass = 'test_pass';
}
无意中,在实例化类之后,我在我设置的变量上运行print_r
,并将这些私有变量打印到屏幕上。
$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
)
这对我来说有点担心。如果我在我的服务器上打包了一个包含敏感信息的类,供其他人包含和使用而无需访问密码等,他们可以直接转储这些。我错过了一些关键的东西来防止这种行为发生吗?有没有更好的方法来处理对象中的敏感信息?
答案 0 :(得分:1)
将成员设置为私有并不意味着您看待它的方式的安全性(即隐藏敏感数据)。它只是对使用扩展类或整个应用程序中的成员的其他人(开发人员)的安全性。
不意味着保护数据不会与无法看到数据的人共享。如果您不希望其他人看到它,请不要将其包含在其他人正在使用的代码中。
长话短说。可见性只是为了防止初级开发人员搞砸或弄乱你的代码。 ; - )
答案 1 :(得分: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'));
看到它呢?