아

4.0이상의 PHP에서 register_globals 문제

· 2007-02-02 (금) 17:10:03 · 3488
호스팅 서버 같은 곳에서 보안상의 이유로 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 하는 방법이 더
낳을것 같지만 그렇게 되면 기존의 소스를 너무 수정을 해야 하기 때문에 위
와 같은 식으로 전역 변수화 처리를 한 것입니다. ^^;
==========================================================================
이번에 외국 서버에 사이트 이전 작업하다가 이문제로 무지 고생했네요.
고생고생 해서 해결한 만큼 좋은 경험 한것두 같습니다.
참 저같은 경우는 적용이 안되었습니다.^^;;;;

출저 : koreaPHP tip&tech<div class='small'>[이 게시물은 관리자님에 의해 2011-10-31 17:12:10 PHP & HTML에서 이동 됨]</div>
|
댓글을 작성하시려면 로그인이 필요합니다.

프로그램

8,188건
+
제목 글쓴이 날짜 조회
08-01-27 조회 3,805
08-01-26 조회 8,563
08-01-21 조회 3,313
08-01-08 조회 3,766
07-12-21 조회 4,706
07-12-14 조회 4,860
07-12-13 조회 6,307
07-12-10 조회 4,098
07-12-03 조회 3,252
07-12-03 조회 4,294
07-11-27 조회 5,790
07-11-26 조회 2,996
07-11-22 조회 5,112
07-11-21 조회 3,326
07-11-21 조회 1.1만
07-11-12 조회 4,072
07-11-07 조회 4,834
07-10-29 조회 3,584
07-10-25 조회 4,999
07-10-24 조회 3,792
07-10-23 조회 5,982
07-10-09 조회 4,144
07-10-09 조회 4,604
07-10-09 조회 3,202
07-10-09 조회 3,561
07-09-27 조회 3,863
07-09-27 조회 3,088
07-09-15 조회 4,016
07-09-13 조회 2,788
07-09-13 조회 3,248
07-08-07 조회 3,277
07-08-04 조회 3,422
07-07-30 조회 5,424
07-07-29 조회 3,789
07-07-29 조회 4,458
07-07-21 조회 3,101
07-07-20 조회 3,147
07-07-20 조회 4,310
07-07-07 조회 3,387
07-07-06 조회 5,211
07-07-06 조회 5,607
07-07-05 조회 6,747
07-07-04 조회 3,380
07-06-11 조회 3,901
07-06-04 조회 7,243
07-05-28 조회 4,873
07-05-14 조회 6,340
07-05-10 조회 5,287
07-05-09 조회 3,388
07-05-04 조회 3,685
07-04-27 조회 3,329
07-04-25 조회 4,648
07-04-19 조회 3,612
07-04-16 조회 3,218
07-04-13 조회 3,837
07-04-12 조회 4,558
07-04-12 조회 4,773
07-04-11 조회 3,403
07-04-08 조회 5,132
07-04-07 조회 3,236
07-03-29 조회 3,542
07-03-27 조회 3,749
07-03-21 조회 5,146
07-03-15 조회 3,283
07-03-11 조회 3,301
07-03-10 조회 4,938
07-03-09 조회 3,942
07-03-08 조회 4,823
07-03-05 조회 2,944
07-03-02 조회 3,033
07-03-02 조회 3,871
07-02-26 조회 2,920
07-02-26 조회 3,012
07-02-23 조회 4,262
07-02-23 조회 3,329
07-02-23 조회 3,329
07-02-23 조회 3,513
07-02-22 조회 3,152
07-02-21 조회 4,804
07-02-20 조회 4,603
07-02-14 조회 3,751
07-02-12 조회 5,341
07-02-11 조회 4,772
07-02-10 조회 4,079
07-02-09 조회 3,853
07-02-08 조회 4,519
07-02-03 조회 4,115
07-02-02 조회 3,489
07-01-09 조회 3,576
07-01-08 조회 3,946
06-12-26 조회 4,643
06-12-21 조회 3,751
06-12-15 조회 4,161
06-12-15 조회 7,440
06-12-15 조회 3,170
06-12-15 조회 3,189
06-12-15 조회 3,463
06-12-15 조회 3,120
06-12-15 조회 4,540
06-12-15 조회 3,137