2011-04-22 4 views
3

한 호스트에서 다른 호스트로 웹 사이트를 마이그레이션하려고합니다. 첫 번째 호스트에서 양식을 제출하면 모든 양식 값이 자동으로 입력 이름 (PHP)으로 변수에 고정됩니다.제출 된 모든 양식 값을 PHP로 가져 와서 변수에 자동으로 할당하려면 어떻게합니까?

$data = $_GET['data'];

이 원인이되는 PHP 구성 설정이 있습니까 : 새 호스트에서이 값은 내가이 작업을 수행하지 않는 한 모든 null이? 존재하지 않으면 모든 $ _GET 변수를 반복하여 같은 이름의 변수에 자동으로 할당하는 쉬운 방법이 있습니까?

감사합니다.

+2

설정은'register_globals'이며,'extract ($ _ GET);'로 시뮬레이션 할 수 있습니다. 그러나 정말로, *** *** 이것을하지 마십시오. 'register_globals'는 좋지 않게 사용되지 않았습니다 - 심각한 보안 문제가 있습니다. 대신 코드를 더 잘 작성하십시오. – NikiC

답변

6

설정은 register_globals이지만 보안 위험이 있으므로 사용하지 않도록 강력히 권장됩니다. 누구든지 스크립트에서 부정적이거나 예상치 못한 방식으로 코드와 상호 작용할 수있는 변수를 설정할 수 있습니다.

당신이 절대적으로, 당신은 이런 식으로 작업을 수행 할 수 있습니다해야합니다 :

foreach ($_GET as $key=>$value) { 
    $$key = $value; 
} 

또는, 더 간단하게 :

import_request_variables("g", "myprefix_"); // This way forces you to use "myprefix_" 
// in front of the variables, better ensuring you are not unaware 
// of the fact that this can come from a user 
:

import_request_variables("g"); 

이나, 조금 더 안전하게 만들려면

extract ($ _ GET)는 누군가 다른 사람이 지적했듯이 작동 할 수 있으며 접두어를 추가하거나 (추가 인수를 통해) 추출이 기존 변수와 충돌하는 경우 (예 : 다른 변수를 정의한 후에 추출한 경우) 추출 기능에서

1

당신이 뭔가를 할 수 있습니다 :

foreach ($_GET["data"] as $name => $value){ 
    $$name = $value; 
} 

이 가진 문제는 사람들이 쉽게 스크립트의 변수 바이올린 할 수있게한다는 것입니다. 나는 http://yoursite.com/?sql=DELETE+FROM을 방문 할 수 있었다.

나는 이것을하고 $ _GET을 사용하는 것에 대해 충고한다.

0

$ _GET [ 'data']를 $ data에 할당 할 때 필터링이나 유효성 검사를 수행하지 않고 있다고 가정합니다. 스크립트에서 이러한 종류의 검사를 수행하지 않는 한.

예상되는 데이터가 예상과 일치하지 않는 경우 일찍 실패하기 위해 대부분의 프로그래머가 먼저 수행 한 것으로부터 긍정적 인 int를 예상 할 경우 위의 할당은 다음과 같이됩니다.

if(isset($_GET['data']) && (int)$_GET['data'] === 0){ 
//fail 
}else{ 
$data = $_GET['data']; 
} 

그래서 주춤 나를 만드는

$data = $_GET['data'] 

그냥 일반보고.

관련 문제