var_dump Объект класса php показывает имя пользователя и пароль базы данных
Я немного волнуюсь, когда я случайно var_dump()
объект дочернего класса, результат показал все мои элементы sql и значения переменных, включая имя пользователя базы данных, пароль и имя DB. Есть ли проблема безопасности с этим. Если да, то как мне это защитить? Был бы благодарен, если бы кто-то показал мне свет на это.
$ClassObject=new MyChildClass();
var_dump($ClassObject);
Пример результата выглядит следующим образом:
object(MyChildClass)#1 (17) { ["database":protected]=> object(Crud)#2 (13) { ["lines"]=> string(12) "column_name" ["vals"]=> NULL ["query"]=> NULL ["table"]=> string(8) "users" ["DB_TYPE":"Database":private]=> string(5) "mysql" ["host":"База данных ":private]=> string(9) "localhost" ["user":"Database":private]=> string(4) "root" ["pass":"Database":private]=> string(7) "mypass" ["db":"База данных": private] => строка (13) "mydbname" ["conn":"База данных": private] => объект (PDO)#3 (0) { } ["ошибка ":" База данных ":private]=> NULL ["result"]=> NULL ["stmt":" База данных ": private] => объект (PDOStatement)#5 (1) { ["queryString"]=> строка (51) "SELECT имя_ столбца ОТ ms_users WHERE userid=:uid" } } ["loguserid":"Users":private]=> string(1) "4" ["rows"]=> array(0) { } ["vals"]=> NULL ["query"]=> NULL ["table"]=> string(16) "MyTable_name" ["DB_TYPE":"База данных":private]=> string(5) "mysql" ["host":"Database":private]=> string(9) "localhost" ["user":"Database":private]=> string(4) "root" ["pass":"Database":private]=> ул ing(7) "MyPass" ["db":"База данных": private] => строка (13) "mydbname" ["conn":"База данных": private] => NULL ["ошибка": "База данных": private] => NULL ["result"] => NULL ["stmt": "База данных":private]=> NULL ["join"]=> string(0) "" ["where"]=> string(35) "user_id=:id1 AND column_name=:id2" }
1 ответ
Волшебный метод http://php.net/__debugInfo делает именно это. В своем классе добавьте следующий код:
public function __debugInfo()
{
$properties = get_object_vars($this);
unset($properties['host']);
unset($properties['user']);
unset($properties['pass']);
return $properties;
}
Как это работает: первая строка возвращает полный список свойств в текущем экземпляре. Затем с unset
мы удаляем все свойства, которые мы не хотим отображать var_dump
,
Изменить код для удаления из $properties
все свойства, которые вы хотите скрыть.
В этом первом примере все свойства, кроме 3, будут отображаться при использовании var_dump
на этом объекте.
Или используйте более безопасный способ: создайте пустой массив и заполните его только теми свойствами, которые вы хотите отобразить:
public function __debugInfo()
{
$properties = [];
$properties[] = 'table';
$properties[] = 'queryString';
return $properties;
}
Во втором примере только 2 свойства будут отображаться при использовании var_dump
на этом объекте.
Добавив этот метод ко всем своим классам, вы можете точно контролировать, что отображается при использовании var_dump
,
Документация: http://php.net/__debugInfo