YesYo.com MintState Forums
뒤로    YesYo.com MintState BBS > Tech > PHP
검색
멤버이름    오토
비밀번호 
 

4.1.0이상 php 버전에서 register_globals = Off 일때 기존변수 그대로 사용하기

페이지 정보

작성자 MintState 댓글 0건 조회 13,332회 작성일 08-10-29 17:33

본문

4.1.0이상 php 버전에서 register_globals = Off 일때 기존변수 그대로 사용하기 

출처 : http://www.oops.org/SERVICE/jsboard/read.php?table=jsboard_oopsFAQ&no=113&page=1

호스팅 서버 같은 곳에서 보안상의 이유로 register_globals 를 OFF 로 변경
하거나 또는 보안상 register_globals 를 OFF 로 변경하고 싶은데 기존의 소
스들 때문에 망설이시는 분들께 유용한 함수가 될것 같네요.

테스트 환경은 다음과 같이 하시면 이해가 쉬울 것 같습니다. 일단 php.ini
에서 register_globals = Off 로 설정을 한뒤에 아파치를 재시작 합니다. 다
음 간단하게 웹루트에 test_query.php 라는 스크립트를 하나 만듭니다.

--------- test_query.php -----------
<? 
function parse_query_str($level=0) { 
# php.ini 의 register_globals 값을 확인한다. 
# register_globals = OFF 일 경우만 작동. 
if(ini_get("register_globals")) return; 

# php 버젼이 4.1 보다 낮을 경우에는 함수 안에서 trackvar 
# 를 사용하기 위해 global 로 지정해 줘야 한다. 
if(substr(PHP_VERSION,0,3) < 4.1) { 
global $HTTP_GET_VAR, $HTTP_POST_VARS; 
if($level) 
global $HTTP_COOKIE_VARS,$HTTP_SESSION_VARS,$HTTP_SERVER_VARS; 
} 

# 4.1 부터는 trackvars 에 대해 무조건 배열로 생성을 하기 
# 때문에 is_array() 함수 보다는 count() 함수로 배열의 수를 
# 체크한다. 
if(count($HTTP_GET_VARS)) { 
foreach($HTTP_GET_VARS as $key => $value) { 
global ${$key}; 
${$key} = $value; 
} 
} 

if(count($HTTP_POST_VARS)) { 
foreach($HTTP_POST_VARS as $key => $value) { 
global ${$key}; 
${$key} = $value; 
} 
} 

if( $level && count($HTTP_COOKIE_VARS) ) { 
foreach($HTTP_COOKIE_VARS as $key => $value) { 
global ${$key}; 
${$key} = $value; 
} 
} 

if( $level && count($HTTP_SESSION_VARS) ) { 
foreach($HTTP_SESSION_VARS as $key => $value) { 
global ${$key}; 
${$key} = $value; 
} 
} 

if( $level && count($HTTP_SERVER_VARS) ) { 
foreach($HTTP_SERVER_VARS as $key => $value) { 
global ${$key}; 
${$key} = $value; 
} 
} 
} 

# POST, GET 만 제어한다. 
parse_query_str(); 

echo "$a<br>n$b<br>n$c<br>n"; 

# POST, GET , COOKIE, SESSION, SERVER_var 를 모두 제어한다. 
parse_query_str(1); 
echo "$PHP_SELFn"; 
?>


다음 http://domain.com/test_query.php 를 웹브라우져로 호출을 합니다. 결
과는 소스의 parse_query_str() 함수를 호출을 할 때와 안할 때의 차이를 보
시면 알겁니다.

위와 같이 이용을 하면 register_globals 의 값을 On 으로 두던 Off 로 두던
보안을 강화하면서 register_globals 의 값에 상관없이 register_globals 의
값이 On 일때 처럼 코딩을 할 수 있게 됩니다.

이 함수가 보안을 위하여 register_globals 의 값을 Off 로 두는것에 어떠한
작용을 하게 될지에 대해서는 검증이 되지는 않았습니다만 일단 넘어오는 값
을 GET 이면 GET 으로 넘어온 값을 조절하고 POST 이면 POST 의 값을 조절하
기 때문에 크게 위배되지는 않을것 같습니다.

원래는 GET 과 POST 로 넘어오는 값을 하나의 배열로 return 하는 방법이 더
낳을것 같지만 그렇게 되면 기존의 소스를 너무 수정을 해야 하기 때문에 위
와 같은 식으로 전역 변수화 처리를 한 것입니다. ^^;

댓글목록

등록된 댓글이 없습니다.

Total 165건 6 페이지
PHP 목록
번호 제목 글쓴이 조회 날짜
40 MintState 12472 10-31
39 MintState 13220 10-31
38 MintState 11430 10-31
37 MintState 12916 10-31
36 MintState 13636 10-31
35 MintState 11431 10-31
34 MintState 11062 10-31
33 MintState 17852 10-31
32 MintState 14496 10-31
31 MintState 11720 10-31
30 MintState 13526 10-29
29 MintState 17830 10-29
28 MintState 12203 10-29
27 MintState 10418 10-29
26 MintState 16332 10-29
열람중 MintState 13333 10-29
24 MintState 14733 10-29
23 MintState 14722 10-29
22 MintState 14817 10-29
21 MintState 12181 10-29
20 MintState 11006 10-29
19 MintState 11460 10-29
18 MintState 12442 10-29
17 MintState 10502 10-29
16 MintState 9725 10-29
게시물 검색
모바일 버전으로 보기
CopyRight ©2004 - 2024, YesYo.com MintState. ™