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 Ubuntu 7.04 Server 에 Zend Optimizer 3.2.8 설치하기! ADMINPLAY 2009.07.19 11636
27 SENDMAIL SPAMASSASSIN 관리 local.cf ADMINPLAY 2009.07.18 11401
26 PHP 언어디코딩 ADMINPLAY 2009.07.18 11533
25 php.ini 옵션 한글설명 ADMINPLAY 2009.07.18 9626
24 [PHP] 정규 표현식 정리 ADMINPLAY 2009.06.29 14894
23 Warning: main(): URL file-access is disabled in the se... ADMINPLAY 2009.06.04 8235
22 call undefined mysql connect 와 같은 mysql 라이브러리... ADMINPLAY 2009.06.04 9014
21 call undefined mysql connect 에러 발생시 해결 방안 ADMINPLAY 2009.06.04 8430
20 php.ini 설명 ADMINPLAY 2009.06.04 7383
19 Freetds 설치 참고 (sybase) ADMINPLAY 2009.06.04 10717
18 DBA: Could not find necessary header file 발생시 대처법 ADMINPLAY 2009.06.04 9249
17 php 버전 정보 숨기기 ADMINPLAY 2009.06.04 8131
16 php 명령어 이용 phpinfo 확인 ADMINPLAY 2009.06.04 10236
15 php.ini 세션유지 시간 설정 ADMINPLAY 2009.06.04 10965
14 php 5.1.4 인데 ZipArchive() 사용하기 --enable-zip file ADMINPLAY 2009.06.03 13300
13 PHP 컴파일하고 Make 할때 lltdl을 찾을 수 없다면서 중지... ADMINPLAY 2009.06.01 11494
12 Fedora 및 CentOs 에서 Imap PHP 연동시 에러가날때 ADMINPLAY 2009.06.01 9059
11 php에서 curl 설치하기 ADMINPLAY 2009.06.01 16841
10 ini_set("allow_url_fopen", 1); -- allow_url_fopen = Of... ADMINPLAY 2009.06.01 10124
9 freetds 설치 (php로 외부 MS-SQL 서버에 접속 사용하기) ADMINPLAY 2009.05.18 9595
Board Pagination Prev 1 2 3 Next
/ 3

Copyright ADMINPLAY corp. All rights reserved.

abcXYZ, 세종대왕,1234

abcXYZ, 세종대왕,1234