Skip to content

?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

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

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

--------- cut here 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";
?>
--------- cut here test_query.php -----------

다음 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 하는 방법이 더
낳을것 같지만 그렇게 되면 기존의 소스를 너무 수정을 해야 하기 때문에 위
와 같은 식으로 전역 변수화 처리를 한 것입니다. ^^;

사용해 보시고 판단해 주세요. 

List of Articles
번호 제목 글쓴이 날짜 조회 수
28 call undefined mysql connect 에러 발생시 해결 방안 ADMINPLAY 2009.06.04 8468
27 call undefined mysql connect 와 같은 mysql 라이브러리... ADMINPLAY 2009.06.04 9045
26 Warning: main(): URL file-access is disabled in the se... ADMINPLAY 2009.06.04 8270
25 [PHP] 정규 표현식 정리 ADMINPLAY 2009.06.29 14932
24 php.ini 옵션 한글설명 ADMINPLAY 2009.07.18 9701
23 PHP 언어디코딩 ADMINPLAY 2009.07.18 11557
22 SENDMAIL SPAMASSASSIN 관리 local.cf ADMINPLAY 2009.07.18 11450
21 Ubuntu 7.04 Server 에 Zend Optimizer 3.2.8 설치하기! ADMINPLAY 2009.07.19 11671
20 PHP - eAccelerator 설치 ADMINPLAY 2009.08.03 15054
19 php컴파일에러(flex) configure: error: cannot find out... ADMINPLAY 2009.08.08 16157
18 PHPMyAdmin - blowfish_secret 해결방법 ADMINPLAY 2009.09.08 16550
17 Warning: flock(): supplied argument is not a valid str... ADMINPLAY 2009.09.09 16812
16 php세션정리 ADMINPLAY 2009.09.19 17241
15 Maximum execution time of 30 seconds exceeded ADMINPLAY 2009.09.28 17436
14 PHP.INI에서의 세션 관련설명 ADMINPLAY 2009.10.19 17546
13 PEC HTTP Setup ADMINPLAY 2009.12.31 15979
12 pear 1.9 업그레이드 및 패치설치 ADMINPLAY 2009.12.31 17366
11 Fatal error: Call to undefined function domxml_open_mem() ADMINPLAY 2009.12.31 17399
10 PHP FreeTDS 사용 (MS-SQL) file ADMINPLAY 2010.01.05 16983
» 4.1.0이상 php 버전에서 register_globals = Off 일때 기... ADMINPLAY 2010.01.09 15485
Board Pagination Prev 1 2 3 Next
/ 3

Copyright ADMINPLAY corp. All rights reserved.

abcXYZ, 세종대왕,1234

abcXYZ, 세종대왕,1234