var_dump php类对象显示数据库用户名和密码


var_dump a php Class object reveals database username and password

当我偶然var_dump()一个子类的对象时,我有点担心,结果显示了我所有的sql元素和变量值,包括数据库用户名、密码和DBname。它有安全问题吗?如果有,我该如何保护它?如果有人给我看一盏灯,我会很感激。

$ClassObject=new MyChildClass();
var_dump($ClassObject);

样本结果如下:-

object(MyChildClass)#1(17){["database":protected]=>object(Crud)#2(13) {["rows"]=>string(12)"column_name"["vals"]=>NULL["query"]=>NULL["table"]=>string(8)"users"["DB_TYPE":"Database":private]=>string(5)"mysql"["host":"Database":private]=>string(9)"localhost"["user":"Database":private]=>string(4)"root"["pass":"Database":private]=>string(7)"mypass"["db":"Database":private]=>string(13)"mydbname"["conn":"Database":private]=>对象(PDO)#3(0){}["error":"Database":private]=>NULL["result"]=>NULL["stmt":"Database":private]=>对象(PDOStatement)#5(1){["queryString"]=>string(51)"SELECT column_name FROM ms_users WHEREuserid=:uid"}}["loguserid":"Users":private]=>string(1)"4"["行"]=>数组(0){}["vals"]=>NULL["query"]=>NULL["table"]=>string(16)"MyTable_name"["DB_TYPE":"Database":private]=>string(5)"mysql"["host":"Database":private]=>string(9)"localhost"["user":"Database":private]=>string(4)"root"["pass":"Database":private]=>string(7)"MyPass"["db":"Database":private]=>string(13)"mydbname"["conn":"Database":private]=>NULL["error":"数据库":private]=>NULL["result"]=>NULL["stmt":"Database":private]=>NULL"join"]>>string(0)"["其中"]=>string(35)"user_id=:id1 ANDcolumn_name=:id2"}

神奇的方法__debugInfo就是这么做的。在你的课堂上,添加以下代码:

public function __debugInfo()
{
    $properties = get_object_vars($this);
    unset($properties['host']);
    unset($properties['user']);
    unset($properties['pass']);
    return $properties;
}

工作方式:第一行检索当前实例中的完整属性列表。然后,使用unset,我们删除了var_dump不希望显示的所有属性
修改代码以从$properties中删除所有要隐藏的属性。

在第一个示例中,在此对象上使用var_dump时,将显示除3以外的所有属性。

或者使用一种更安全的方法:创建一个空数组,并只使用您想要显示的属性填充它:

public function __debugInfo()
{
    $properties = [];
    $properties[] = 'table';
    $properties[] = 'queryString';
    return $properties;
}

在第二个示例中,当对此对象使用var_dump时,将只显示2个属性。

通过将此方法添加到所有类中,可以准确地控制使用var_dump时显示的内容。

文档:__debugInfo