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

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

  1. php mysql에 insert시 싱글쿼츠(홑따옴표) 입력 처리 (mag...

    Date2013.09.07 ByADMINPLAY Views8972
    Read More
  2. Ubuntu 에서 PHP Screw 컴파일시 에러날 때

    Date2013.09.07 ByADMINPLAY Views7029
    Read More
  3. [php모듈] php 소스 암호화 하기 - php_screw-1.5

    Date2013.03.26 ByADMINPLAY Views9617
    Read More
  4. configure: error: utf8_mime2text() has new signature, ...

    Date2010.05.18 ByADMINPLAY Views21989
    Read More
  5. oracle10g + php5.2.11 error [OCIEnvNlsCreate() failed]

    Date2010.02.24 ByADMINPLAY Views71308
    Read More
  6. Warning: Unknown: open(, O_RDWR) failed: No such file ...

    Date2010.01.29 ByADMINPLAY Views19807
    Read More
  7. register_globals 에 따른 서버 변수형 변환

    Date2010.01.09 ByADMINPLAY Views17905
    Read More
  8. register_globals = off 란?

    Date2010.01.09 ByADMINPLAY Views15583
    Read More
  9. 4.1.0이상 php 버전에서 register_globals = Off 일때 기...

    Date2010.01.09 ByADMINPLAY Views15485
    Read More
  10. PHP FreeTDS 사용 (MS-SQL)

    Date2010.01.05 ByADMINPLAY Views16983
    Read More
  11. Fatal error: Call to undefined function domxml_open_mem()

    Date2009.12.31 ByADMINPLAY Views17399
    Read More
  12. pear 1.9 업그레이드 및 패치설치

    Date2009.12.31 ByADMINPLAY Views17366
    Read More
  13. PEC HTTP Setup

    Date2009.12.31 ByADMINPLAY Views15979
    Read More
  14. PHP.INI에서의 세션 관련설명

    Date2009.10.19 ByADMINPLAY Views17546
    Read More
  15. Maximum execution time of 30 seconds exceeded

    Date2009.09.28 ByADMINPLAY Views17436
    Read More
  16. php세션정리

    Date2009.09.19 ByADMINPLAY Views17241
    Read More
  17. Warning: flock(): supplied argument is not a valid str...

    Date2009.09.09 ByADMINPLAY Views16812
    Read More
  18. PHPMyAdmin - blowfish_secret 해결방법

    Date2009.09.08 ByADMINPLAY Views16550
    Read More
  19. php컴파일에러(flex) configure: error: cannot find out...

    Date2009.08.08 ByADMINPLAY Views16157
    Read More
  20. PHP - eAccelerator 설치

    Date2009.08.03 ByADMINPLAY Views15054
    Read More
Board Pagination Prev 1 2 3 Next
/ 3

Copyright ADMINPLAY corp. All rights reserved.

abcXYZ, 세종대왕,1234

abcXYZ, 세종대왕,1234