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. No Image 07Sep
    by ADMINPLAY
    2013/09/07 by ADMINPLAY
    Views 8909 

    php mysql에 insert시 싱글쿼츠(홑따옴표) 입력 처리 (magic_quotes_gpc에 대한 이해)

  2. No Image 07Sep
    by ADMINPLAY
    2013/09/07 by ADMINPLAY
    Views 6972 

    Ubuntu 에서 PHP Screw 컴파일시 에러날 때

  3. No Image 26Mar
    by ADMINPLAY
    2013/03/26 by ADMINPLAY
    Views 9528 

    [php모듈] php 소스 암호화 하기 - php_screw-1.5

  4. No Image 18May
    by ADMINPLAY
    2010/05/18 by ADMINPLAY
    Views 21856 

    configure: error: utf8_mime2text() has new signature, but U8T_CANONICAL is missing. This should not happen. Check config.log for additional information.

  5. No Image 24Feb
    by ADMINPLAY
    2010/02/24 by ADMINPLAY
    Views 71249 

    oracle10g + php5.2.11 error [OCIEnvNlsCreate() failed]

  6. No Image 29Jan
    by ADMINPLAY
    2010/01/29 by ADMINPLAY
    Views 19754 

    Warning: Unknown: open(, O_RDWR) failed: No such file or directory (2) in Unknown on line 0

  7. No Image 09Jan
    by ADMINPLAY
    2010/01/09 by ADMINPLAY
    Views 17860 

    register_globals 에 따른 서버 변수형 변환

  8. No Image 09Jan
    by ADMINPLAY
    2010/01/09 by ADMINPLAY
    Views 15535 

    register_globals = off 란?

  9. No Image 09Jan
    by ADMINPLAY
    2010/01/09 by ADMINPLAY
    Views 15422 

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

  10. PHP FreeTDS 사용 (MS-SQL)

  11. No Image 31Dec
    by ADMINPLAY
    2009/12/31 by ADMINPLAY
    Views 17335 

    Fatal error: Call to undefined function domxml_open_mem()

  12. No Image 31Dec
    by ADMINPLAY
    2009/12/31 by ADMINPLAY
    Views 17307 

    pear 1.9 업그레이드 및 패치설치

  13. No Image 31Dec
    by ADMINPLAY
    2009/12/31 by ADMINPLAY
    Views 15922 

    PEC HTTP Setup

  14. No Image 19Oct
    by ADMINPLAY
    2009/10/19 by ADMINPLAY
    Views 17501 

    PHP.INI에서의 세션 관련설명

  15. No Image 28Sep
    by ADMINPLAY
    2009/09/28 by ADMINPLAY
    Views 17371 

    Maximum execution time of 30 seconds exceeded

  16. No Image 19Sep
    by ADMINPLAY
    2009/09/19 by ADMINPLAY
    Views 17178 

    php세션정리

  17. No Image 09Sep
    by ADMINPLAY
    2009/09/09 by ADMINPLAY
    Views 16752 

    Warning: flock(): supplied argument is not a valid stream..대처방법

  18. PHPMyAdmin - blowfish_secret 해결방법

  19. No Image 08Aug
    by ADMINPLAY
    2009/08/08 by ADMINPLAY
    Views 16093 

    php컴파일에러(flex) configure: error: cannot find output from lex; giving up

  20. PHP - eAccelerator 설치

Board Pagination Prev 1 2 3 Next
/ 3

Copyright ADMINPLAY corp. All rights reserved.

abcXYZ, 세종대왕,1234

abcXYZ, 세종대왕,1234