2009-02-07 1 views

답변

7

당신은 $_REQUEST를 사용하지만 $_GET, $_POST$_COOKIE의 내용을 포함하고 있음을 인식하고,이 자동 전역 변수의 (목적 덮어 쓰기 및 순서) 존재는 실행 환경에서 구성 될 수 있다고 할 수있다.

이 문제를 일으키는 경우, 간단한 버전을 출시하는 것이 좋습니다 수 있습니다, 요점은 어느 것 당신은 다음 몇 가지 방식으로이 문제를 마무리 할 수 ​​

$requestData = array_merge($_GET, $_POST); 

같은, 아마도 제공 추가적인 유용한 기능, 예. 자동 magic_quotes를 사용하여 망가 값으로 stripslashes()을 적용 실종 변수에 대한 디폴트 값을 제공하는 등

0

전역 변수 $ _REQUEST를 사용할 수 있습니다. PHP를 사용하여 웹 기반 응용 프로그램을 작성할 때 응용 프로그램이 웹 sapi (예 : CGI 또는 웹 서버 모듈)에서 실행될 때 기본적으로 해석되는 PHP에 의해 정의됩니다. $ _REQUEST는 $ _GET 및 $ _POST에있는 모든 데이터의 연관 배열이며 기본적으로 정의됩니다. 그것을 사용하기 위해서는 확장/라이브러리가 필요하지 않습니다.

+0

기본적으로 $ _REQUEST에는 쿠키 데이터도 포함되어 있으며 구성에 따라 예기치 않은 순서 재 지정이 필요할 수 있습니다. – Rob

1

나는 그것이 나쁜 관행 $_POST$_GET을 conflate 생각 것입니다. 그것들은 완전히 다른 것들을위한 것이며, 그것들을 동등하게 취급함으로써, 당신은 효과적으로 HTTP 프로토콜을 오용하고 있습니다. 언급 한 바와 같이 $_REQUEST은 원하는대로 처리하지만 예측할 수는 없습니다. 동일한 작업을 수행하기 위해 자신의 전역 함수를 쉽게 작성할 수 있습니다.

function param($name, $default = null) { 
    return isset($_POST[$name]) 
    ? $_POST[$name] 
    : (isset($_GET[$name]) 
     ? $_GET[$name] 
     : $default); 
} 

하지만 실제로는 나쁜 습관입니다.

+0

동의합니다. POST 요청이 데이터를 업데이트하거나 삭제할 수있는 반면, GET 요청에는 부작용이 없어야합니다. OP의 전략은 해당 구별을 지 웁니다. 즉, 예를 들어 웹 스파이더가 사이트의 링크를 체크 아웃하면 일부 데이터가 삭제 될 수 있습니다. –

0

이 프레임 워크는 앱 전체에서 전역을 처리하는 클래스입니다. 여기서 변수의 처리가 수행되지 않습니다.

class stGlobal 

{

//instance 
private static $instance; 

//global settings 
public $post = ''; 
public $get = ''; 
public $files = ''; 
public $request = ''; 

private function initialize() 
{ 
    $this->post = $_POST; 
    $this->get = $_GET; 
    $this->files = $_FILES; 
    $this->request = $_REQUEST; 
} 

public function getInstance() 
{ 
    if (!isset(self::$instance)) 
    { 
     $class = __CLASS__; 
     self::$instance = new $class(); 
     self::$instance->initialize(); 
    } 
    return self::$instance; 
} 

}

가 보안 결함을 일으킬 수 있습니다 어디서나

$myObj = stGlobal::getInstance(); 
2

두 변수를 병합 (또는 대신 $_REQUEST 또는 Register Globals를 사용)를 사용하기 위해 당신의 definetly 할 수 없습니다 그 값의 근원을 확인하라. 따라서 $_REQUEST['foobar']에 액세스 할 때 값이 URL, POST 본문 또는 쿠키를 통해 전송되었는지 확인할 수 없습니다. 이로 인해 Cross-Site Request Forgery의 스크립트가 취약해질 수 있습니다.

그래서 안심할 수 있도록 보안을 유지하고 가치가 기대되는 변수를 사용하는 것이 좋습니다. $_GET은 URL을 통해 전달되어야하며, POST를 통해 전달되는 쿠키는 $_POST이고 쿠키는 $_COOKIE입니다.

+0

크로스 사이트 요청 위조 취약점은 응용 프로그램이 다양한 사용자 입력 벡터에 다양한 수준의 트러스트를 배치하는 경우에만 문제가됩니다. 최대한의 보안을 위해 * 모든 사용자 입력 벡터는 본질적으로 신뢰할 수없는 것으로 간주되어야합니다. 이 사실을 감안할 때 변수를 병합하는 것은 신뢰할 수있는 단일 사용자 입력 벡터의 부당한 가정을 지우므로 실제로 더 안전하다고 주장 할 수 있습니다. – dreftymac

관련 문제