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 php 5.1.4 인데 ZipArchive() 사용하기 --enable-zip file ADMINPLAY 2009.06.03 13304
27 Ubuntu 7.04 Server 에 Zend Optimizer 3.2.8 설치하기! ADMINPLAY 2009.07.19 11641
26 PHP 언어디코딩 ADMINPLAY 2009.07.18 11536
25 PHP 컴파일하고 Make 할때 lltdl을 찾을 수 없다면서 중지... ADMINPLAY 2009.06.01 11498
24 SENDMAIL SPAMASSASSIN 관리 local.cf ADMINPLAY 2009.07.18 11405
23 php.ini 세션유지 시간 설정 ADMINPLAY 2009.06.04 10970
22 PHPMyAdmin 오류조치법 The mbstring PHP extension was ... ADMINPLAY 2009.01.20 10864
21 Freetds 설치 참고 (sybase) ADMINPLAY 2009.06.04 10721
20 php 명령어 이용 phpinfo 확인 ADMINPLAY 2009.06.04 10240
19 ini_set("allow_url_fopen", 1); -- allow_url_fopen = Of... ADMINPLAY 2009.06.01 10128
18 PHPMyAdmin 오류조치법 Your PHP MySQL library version ... ADMINPLAY 2009.01.20 10026
17 php.ini 옵션 한글설명 ADMINPLAY 2009.07.18 9630
16 freetds 설치 (php로 외부 MS-SQL 서버에 접속 사용하기) ADMINPLAY 2009.05.18 9599
15 [php모듈] php 소스 암호화 하기 - php_screw-1.5 file ADMINPLAY 2013.03.26 9548
14 DBA: Could not find necessary header file 발생시 대처법 ADMINPLAY 2009.06.04 9253
13 Fedora 및 CentOs 에서 Imap PHP 연동시 에러가날때 ADMINPLAY 2009.06.01 9063
12 call undefined mysql connect 와 같은 mysql 라이브러리... ADMINPLAY 2009.06.04 9017
11 php mysql에 insert시 싱글쿼츠(홑따옴표) 입력 처리 (mag... ADMINPLAY 2013.09.07 8922
10 DB 관리 : phpmyadmin ADMINPLAY 2008.12.10 8782
9 php 재 컴파일 없이 필요한 모듈 올리기 1 ADMINPLAY 2008.12.14 8740
Board Pagination Prev 1 2 3 Next
/ 3

Copyright ADMINPLAY corp. All rights reserved.

abcXYZ, 세종대왕,1234

abcXYZ, 세종대왕,1234