2009-09-14 3 views
8

저는 WordPress 소스 코드 (PHP)를 공부하는 동안이 코드를 보았습니다.이 코드는 mergre/get 및 post 값을 모두 하나의 요청 배열로 변환하는 것을 볼 수 있습니다. 그들이 이렇게하는 이유

지금 나는 그것이, $ _GET과 $ _POST는 array_merge() 함수를 사용하여없이 $ _REQUEST 를 호출하여 이미 가능하므로, 어떠한 생각을 알고?

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

답변

17

기본값 $_REQUEST$_GET, $_POST$_COOKIE의 합병이기 때문입니다. 또한이 슈퍼 글로발의 변수가 $_REQUEST으로 병합되는 순서는 ini 설정 variables_order에 따라 달라지며 PHP 5.3.0의 경우에는 request_order의 영향을받을 수 있습니다. 내 생각에 개발자는 $_REQUEST$_GET$_POST으로 구성되어 있고 (예 : 공유 호스트에서) ini 설정에 액세스 할 수없는 경우 특정 순서로 병합되어 있는지 확인하려고했습니다. 스크립트를 통해 variables_orderrequest_order을 구성 할 수 없습니다.

HTH

3

이 당신이 GET 변수와 같은 이름의 POST 변수가있는 경우 그렇습니다, 그것은 GET 하나를 통해 POST 변수를 선택합니다.

또한 쿠키를 $ _REQUEST 변수에 넣지 않을 수도 있습니다.

+2

사실, 그것은 $ _GET을 통해 $ _POST를 선택합니다. array_merge 매뉴얼 : http://www.php.net/manual/en/function.array-merge.php – Havenard

+0

"[...] POST를 통해 GET 변수를 선택합니다". 그건 사실이 아니야; 그것은 다른 방향입니다. 대응하는 키를 가진 후자 배열의 값은 이전 값을 덮어 씁니다. http://www.php.net/array_merge –

+0

고정 된 정보를 참조하십시오. –

1

왜 내가 본 곳에서 완료되었는지는 잘 모르겠지만 한 번에 다른 배열의 값에 대해 일부 처리가 완료되고 그 변경 사항을 $ _REQUEST를 사용하면 $ _REQUEST를 사용하는 모든 사용자가 $ _POST 또는 $ _GET 변수를 완료 했더라도 변경 사항을 가져올 수 있습니다.

이것은 플러그인 개발자가 이러한 변수를 사용하여 데이터에 액세스 할 수 있고 Wordpress 코어가 모두 동일한 데이터를 가져와야하기 때문에 Wordpress와 같은 상황에서 나타납니다.

왜 $ _REQUEST에 직접 참여 하시겠습니까? $ _REQUEST에는 $ _POST 및 $ _GET에없는 많은 추가 정보가 들어 있기 때문입니다. 모든 추가 비트에 처리를 적용하지 않을 수도 있습니다.

6

$_REQUEST은 기본적으로 $_GET, $_POST$_COOKIE 배열의 내용을 포함합니다. 아마도 COOKIE 변수를 일반적으로 그 용도로 사용하지 않기 때문에 COOKIE 변수를 제외시키고 자 할 수도 있습니다.

+0

+1 똑같은 것을 씁니다. – Havenard

+0

나중에 보안상의 이유로 $ _REQUEST에서 COOKIES를 제거하고 GET 및 POST를 함께 사용할 수있게하려고합니다. 똑같이 생각하는 위대한 마음에 +1. – mauris

+0

예, 이것은 일반적인 XSS 공격 벡터입니다. 왜냐하면 악의적 인 JavaScript가 사용자가 알아 차리지 못하게 쿠키 바를 설정할 수 있기 때문입니다. PHP의 기본 GPC 순서는 이러한 쿠키 값이 사용자가 양식에 입력 한 값을 무시한다는 것을 의미합니다. – joelhardi

관련 문제