2012-11-27 2 views
-2

다른 개발자와 함께 응용 프로그램을 코딩하고 있습니다. 유용한 "세션"키가 변경되지 않도록 보호하려고합니다.세션 수정 사용 안 함 (PHP)

는 예를 들어, 연결 경우 경우 : 일부 개발자는 단지 예를 들어, $_SESSION['can_access_to_all'] = '1';을 변경할 수 있습니다

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

. 하지만 $_SESSION['can_access_to_all']이 변경되지 않도록하려면 어떻게해야합니까? 해결책이 있습니까?

+0

변경하지 말 것을 부탁드립니다. –

+0

오늘 저는 3 명의 개발자가 있습니다. 내일은 10 명이 될 수도 있습니다. 응용 프로그램을 보호해야합니다. :) – Cartha

+0

글쎄, 개발자는 자신의 응용 프로그램을 '보호'하지 않으므로 해커로부터 보호 할 수 있습니다. –

답변

-1

그런 일은 할 수 없습니다. 그리고 당신이해야하는 이유가 정말로 없습니다.

0

또는 세션을 조작하는 클래스를 만들 수 있습니다. getter와 setter를 만들고, 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; 
    } 
} 
?> 
+0

당신. 이것에 대한 예를 들어 주시겠습니까? – Cartha

0

마이클의 말은 정확합니다. 완전히 막을 수는 없습니다. 실수를 막기 위해 래스터를 사용하여 일부 바의 변경을 방지 할 수 있습니다. EG :

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

, 최고의 당신이 실제로 사용 클래스에 대한 액세스와 세터

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(); 
+0

마지막 질문에 : 내 응용 프로그램은 일종의 많은 유료 플러그인입니다. 따라서 개발자가 세션 이름과 값을 알고 (어디서나 인쇄 할 수 있으며) 수정할 수있는 경우 모든 제한을 비활성화하는 "패치"를 만들 수 있습니다. 나는 미래를 위해 자신을 보호하기를 원합니다. 당신의 해결책은 그게 제가 생각한 것입니다. 응용 프로그램이 시작될 때 선언 된 모든 세션을 "저장"한 다음 바닥 글의 마지막 줄에서이를 복원하는 것이 좋습니다. – Cartha

+0

불행히도 PHP 코드를 다른 개발자에게 넘기면 원하는대로 할 수 있습니다.비록 컴파일 된 코드에 포함되어 있다고하더라도, 애스펙트의 모든 PHP 부분은 여전히 ​​변경 될 수 있습니다. 세션을 복원하더라도 모든 페이지의 시작 부분에서 패치를 호출 할 수 있기 때문에 그러한 패치를 막을 수는 없습니다. 코드를 작성할 수있는 첫 번째 줄 앞에 모든 것을 제어하려는 경우 아무 꼬리말도 필요하지 않습니다. 그냥 상단에 추가 할 수도 있습니다. 그의 세션은 현재 페이지로드가 끝날 때가 아니라 다음 페이지를 요청할 때 복원됩니다. –

+0

그래서 실제로 그 해결책은 없습니까? – Cartha

0

당신 크립트 또는 세션 값을 등록 할 수 있습니다를 방지 할 수 있습니다. 하지만 귀하의 crypt algo가 코드에 포함되어 있으므로 개발자가이 클래스에 대한 모든 액세스 권한을 갖고 있거나 (어떤 클래스/메소드가 비밀 세션에서 작동하는지 알면) 작동하지 않습니다.