세이박스

'globals'에 해당되는 글 1건

  1. PHP register_globals=Off 상태에서의 POST,GET 변수제어

PHP register_globals=Off 상태에서의 POST,GET 변수제어

웹프로그램
제목: register_globals=Off 상태에서의 POST,GET 변수제어
분류: php
글쓴이: 김정균 <admin@oops.org>

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

JSBoard 를 개발하다가 보안때문에 register_globals 를 OFF
로 두었을때 작동을 하지 않는다는 문의가 많이 들어와 만든
함수입니다..

* PHP 4.1 이상 버젼용

function parse_query_str() {
foreach($_GET as $key => $value) {
global ${$key};
${$key} = $value;
}

foreach($_POST as $key => $value) {
global ${$key};
${$key} = $value;
}
}

* PHP 4.0 이하 버젼용

function parse_query_str() {
foreach($HTTP_GET_VARS as $key => $value) {
global ${$key};
${$key} = $value;
}

foreach($HTTP_POST_VARS as $key => $value) {
global ${$key};
${$key} = $value;
}
}

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

--------- cut here test_query.php -----------
<?
function parse_query_str() {
foreach($_POST as $key => $value) {
global ${$key};
${$key} = $value;
}

foreach($_GET as $key => $value) {
global ${$key};
${$key} = $value;
}
}
parse_query_str();
echo "$a<br>\n$b<br>\n$c<br>\n";
?>
--------- cut here test_query.php -----------

다음 http://domain.com/test_query.php 를 웹브라우져로 호 출을 합니다. 결과는 소스의 arse_query_str() 함수를 호출 을 할 때와 안할 때의 차이를 보시면 알겁니다.

위와 같이 이용을 하면 register_globals 의 값을 On 으로 두던 Off 로 두던 보안을 강화하면서 register_globals 의 값에 상관없이 register_globals 의 값이 On 일때 처럼 코 딩을 할 수 있게 됩니다.

이 함수가 보안을 위하여 register_globals 의 값을 Off 로 두는것에 어떠한 작용을 하게 될지에 대해서는 검증이 되지 는 않았습니다만 일단 넘어오는 값을 GET 이면 GET 으로 넘 어온 값을 조절하고 POST 이면 POST 의 값을 조절하기 때문 에 크게 위배되지는 않을것 같습니다.

원래는 GET 과 POST 로 넘어오는 값을 하나의 배열로 return 하는 방법이 더 낳을것 같지만 그렇게 되면 기존의 소스를 너무 수정을 해야 하기 때문에 위와 같은 식으로 전역 변수화 처리를 한 것입니다. ^^;
---------------------------------------------------------------------------
http://kltp.kldp.org/