2016-07-17 10 views
1

私は副次的にvar_dump()の子オブジェクトのオブジェクト、私のすべてのSQLの要素とデータベースのユーザー名、パスワードとDBnameを含む変数の値を示して少し心配です。セキュリティ上の問題はありますか?はいの場合はどのように私はそれをシールドするのですか?誰かが私にそれについての光を見せてくれたら、感謝しています。次のようにvar_dump php Classオブジェクトは、データベースのユーザー名とパスワードを明らかにする

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

サンプルの結果は: -

オブジェクト(MyChildClass)#1(17){[ "データベース":保護] =>オブジェクト(CRUD)#2 (13) NULL ["table"] => string(8) "users" ["DB_TYPE"] [ : "データベース":プライベート] => "mysql" ["ホスト": "データベース":プライベート] =>文字列(9) "localhost" ["user": "Database":private] = > "文字列"(4) "ルート" ["パス": "データベース":プライベート] =>文字列(7) "mypass" ["db": " ""データベース ":プライベート" =>文字列(13) "mydbname" ["conn": "データベース":プライベート] =>オブジェクト(PDO)#3(0){} ["エラー": "データベース":プライベート] ["result"] => NULL ["stmt": "データベース":プライベート] =>オブジェクト(PDOStatement)#5(1){ ["queryString"] => string(51) "SELECT (0){} ["vals"] {0} {0} {0} {0} {0} {0} {0}データベース ":プライベート] =>文字列(5) " mysql "[" DB_TYPE ":"データベース ":プライベート] => NULL ["テーブル "] => NULL [["ユーザー": "データベース":プライベート] =>文字列(4) "ルート" ["パス": "データベース":プライベート] ] => string(7) "MyPass" ["db": "Databas ""データベース ":プライベート] => NULL ["エラー ":"データベース ":プライベート] => NULL [" result "] =" string "(文字列(13)" mydbname " > user_name =:id1 AND column_name = "NULL" [NULL] [NULL] [NULL] [NULL] [NULL] [NULL] :id2 "}

答えて

2

マジックメソッド__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を除くすべてのプロパティが表示されます。

それとも安全な方法を使用します。空の配列を作成し、唯一のあなたが表示したいプロパティを移入:この2番目の例では

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

    return $properties; 
} 

をこのオブジェクトにvar_dumpを使用した場合、唯一の2プロパティが表示されます。

このメソッドをすべてのクラスに追加することで、var_dumpを使用して表示される内容を正確に制御できます。

ドキュメント:__debugInfo

+0

ありがとうございました!ジョセリン私はそれを得た。 –