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

时间:2016-07-17 21:57:29

标签: php database class object var-dump

当我偶然var_dump()子类的对象时,我有点担心,结果显示了我的所有sql元素和变量值,包括数据库用户名,密码和DBname。是否存在安全问题。如果是,我该如何屏蔽它?如果有人向我展示了它,我将感激不尽。

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

样本结果如下: -

  

object(MyChildClass)#1(17){[" database":protected] =>对象(CRUD)#2   (13){[" rows"] => string(12)" column_name" ["瓦尔斯"] => NULL [" query"] =>   NULL [" table"] => string(8)" users" [" DB_TYPE":"数据库":私人] =>   string(5)" mysql" ["主机":"数据库":私人] => string(9)" localhost"   ["用户":"数据库":私人] => string(4)" root"   ["通过":"数据库":私人] => string(7)" mypass"   ["分贝":"数据库":私人] => string(13)" mydbname"   ["康恩":"数据库":私人] =>对象(PDO)#3(0){}   ["错误":"数据库":私人] => NULL ["结果"] =>空值   ["语句":"数据库":私人] =>对象(PDOStatement)#5(1){   ["的queryString"] => string(51)" SELECT column_name FROM ms_users WHERE   用户ID =:UID" }" loguserid":"用户":私人] =>字符串(1)" 4"   ["行"] => array(0){} [" vals"] => NULL [" query"] => NULL [" table"] =>   string(16)" MyTable_name" [" DB_TYPE":"数据库":私人] =>串(5)   " MySQL的" ["主机":"数据库":私人] => string(9)" localhost"   ["用户":"数据库":私人] => string(4)" root"   ["通过":"数据库":私人] => string(7)" MyPass"   ["分贝":"数据库":私人] => string(13)" mydbname"   ["康恩":"数据库":私人] => NULL ["错误":"数据库":私人] =>空值   ["导致"] => NULL [" stmt":"数据库":私人] => NULL [" join"] =>   string(0)"" ["其中"] => string(35)" user_id =:id1 AND   列名=:ID2" }

1 个答案:

答案 0 :(得分:3)

魔术方法__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