-2

私は他の開発者と一緒にアプリケーションをコーディングしています。いくつかの便利な「セッション」キーが変更されないように保護したい。

たとえば、接続されている場合:

$_SESSION['can_access_to_all'] = '0';

$_SESSION['can_access_to_all'] = '1';たとえば、一部の開発者は単に変更できます。$_SESSION['can_access_to_all']しかし、どうすれば変更されないように保護できますか? 解決策はありますか?

4

4 に答える 4

0

または、セッションを操作するクラスを作成できます。ゲッターとセッターを作成し、設定したい場合は can_access_to_all かどうかを確認してください。変更しません。

<?php
class Session {
   public function __set($name, $value) {
      if ( $name != 'can_access_to_all' ) 
          $_SESSION[$name] = $value;
   }

   public function __get($name) {
       if ( isset($_SESSION[$name]) ) 
          return $_SESSION[$name];
       return null;
   }
}
?>
于 2012-11-27T11:15:40.607 に答える
0

セッション値を暗号化または署名できます。しかし、暗号アルゴリズムはコード内にあるため、開発者がそれに完全にアクセスできる場合 (または、シークレット セッションで動作するクラス/メソッドを知っている場合) は機能しません。

于 2012-11-27T11:26:12.803 に答える
0

マイケルの言うことは正しい。完全に防ぐことはできません。間違いを防ぐためだけであれば、実際にラッパーを使用して一部の変数の変更を防ぐことができます。例えば:

function setSession($k, $v) {
  if ($k!='can_access_to_all')
    $_SESSION[$k] = $v;
}

ただし、開発者がラッパーを使用せずにセッションを直接変更することを妨げるものではありません。

他にできることは、すべての固定セッションを元に戻すインクルードを最後に追加することです。

//do stuff
//include restoresession.inc

そしてrestoresession.incで

$_SESSION['can_access_to_all'] = 0

現在は、現在のページに対して引き続き変更できますが、リダイレクト時に本来あるべき状態にリセットされます。

しかし、主な問題は、信頼できない開発者に特定のファイル/設定を保持させたいと思うのはなぜですか?

//UPDATE FOR SESSION WITH CLASS、実際のクラスとそのセッターへのアクセスを防止できる場合に最適

class MySettings
{   
    private $can_access_to_all;

    /**
     * Construct 
     */
    final public function __construct()
    {
        //remove if not needed, or use it to make   
        $this->can_access_to_all = 0;
    }

    /**
     * handle requests
     */
    final public function __get($prop) {
        return $this->$prop;
    }

    /**
     * Prevent setting of properties
     */
    final public function __set($prop, $val) {
        trigger_error("Property cannot be set directly");
    }   
}

$_SESSION['MySettings'] = new MySettings();
于 2012-11-27T11:23:49.350 に答える
-1

そんなことはできません。そして、あなたがそうすべき理由は本当にありません。

于 2012-11-27T11:13:40.247 に答える