2009-07-31 15 views
1

私はこれを保存する予定だったオブジェクトのセッションオブジェクトのプロパティです。テストを通じてPHPますprint_rと静的メンバ

私はprint_rセッションオブジェクトプロパティに格納DB物体を露出することを見出さ。出力にはdbユーザー/パスワードが含まれていました。

だから私のアイデアはprint_rセッションオブジェクトで呼び出されるたびに開示されることから、この情報を防ぐために、プライベート静的メンバにDBオブジェクトを格納することでした。

これは受け入れ可能なのですか、または静的メンバーの悪い使用は間違っていますか?

print_rの間に私的物件が開示されないようにするにはどうすればよいでしょうか?

ここにコードサンプルがあります。前

class Session 
{ 

    public __construct(DB $db) 
    { 
     $this->db = $db; 
    } 

} 

後:

class Session 
{ 

    private static $db; 

    pubic __construct(DB $db) 
    { 
     self::$db = $db; 
    } 

} 

答えて

0

はい、これは

print_r()悪いですが、デバッグのためにしていないユーザーにコンテンツを表示するためだけに使用すべきです。

クラスにテスターに​​見えない秘密情報が含まれている場合、秘密である部分をサニタイズ(空の文字列などにフィールドを設定)する必要があります。

3

あなたは停止することはできませんしますprint_r /のvar_dump /でvar_exportこれらを読むことができることから、それはPHPのチームに何回か報告されているが、彼らはそれ機能(...)考えてみます。

http://bugs.php.net/bug.php?id=39118&edit=2
http://bugs.php.net/bug.php?id=35822&edit=1

あなたexempleのように静的メンバを使用する場合は、すべてのセッションのインスタンスがそれにアクセスできることを忘れないでください/同じであり、これは後でいくつかの驚きにつながる可能性があります。

もう1つのアイデアは、一度接続されたDBオブジェクトからのログイン/パスを一掃することです。これは問題の解決に役立ちます。

+0

リンクしたバグレポートは、私的な静的変数ではなく私的な変数を参照しているようです。静的変数はprint_r/var_dump/var_exportからアクセスできないと私は信じています。 –

0

もう1つの方法は、DBオブジェクトを使用する方法を変更することです。セッションメソッドでDBオブジェクトの使用が必要な場合は、 "global $ db;"を呼び出す必要があります。機密性の高いDBログイン情報が実際に永続データの$ _SESSIONオブジェクトの一部ではないことを保証するためのメソッドの開始時に、適切な$ dbオブジェクトを定義し、その寿命中に公開しないようにするのは呼び出し側のページですスクリプトの実行を、SESSIONオブジェクトにぶら下がることなく心配する必要はありません。

関連する問題