호스팅 서버 같은 곳에서 보안상의 이유로 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>
하거나 또는 보안상 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>
게시판 목록
프로그램
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|
| 530 |
|
19년 전 | 1249 | |
| 529 |
|
19년 전 | 1440 | |
| 528 |
|
19년 전 | 1990 | |
| 527 |
사랑과우정
|
19년 전 | 2404 | |
| 526 | 19년 전 | 2885 | ||
| 525 |
|
19년 전 | 2318 | |
| 524 |
|
19년 전 | 1820 | |
| 523 | 19년 전 | 7069 | ||
| 522 |
|
19년 전 | 3750 | |
| 521 | 19년 전 | 2366 | ||
| 520 | 19년 전 | 2416 | ||
| 519 | 19년 전 | 2923 | ||
| 518 |
|
19년 전 | 5818 | |
| 517 |
|
19년 전 | 5579 | |
| 516 |
|
19년 전 | 2284 | |
| 515 |
|
19년 전 | 3330 | |
| 514 | 19년 전 | 2885 | ||
| 513 | 19년 전 | 2241 | ||
| 512 |
개발자관리자
|
19년 전 | 2746 | |
| 511 |
개발자관리자
|
19년 전 | 1602 | |
| 510 |
개발자관리자
|
19년 전 | 1767 | |
| 509 |
개발자관리자
|
19년 전 | 1878 | |
| 508 |
개발자관리자
|
19년 전 | 2026 | |
| 507 |
개발자관리자
|
19년 전 | 1703 | |
| 506 |
개발자관리자
|
19년 전 | 1831 | |
| 505 |
개발자관리자
|
19년 전 | 1795 | |
| 504 |
개발자관리자
|
19년 전 | 1873 | |
| 503 |
개발자관리자
|
19년 전 | 1537 | |
| 502 |
개발자관리자
|
19년 전 | 2676 | |
| 501 | 19년 전 | 2025 | ||
| 500 | 19년 전 | 3258 | ||
| 499 | 19년 전 | 3284 | ||
| 498 | 19년 전 | 2541 | ||
| 497 | 19년 전 | 2614 | ||
| 496 | 19년 전 | 2467 | ||
| 495 | 19년 전 | 2713 | ||
| 494 | 19년 전 | 2695 | ||
| 493 | 19년 전 | 3207 | ||
| 492 | 19년 전 | 2920 | ||
| 491 | 19년 전 | 5343 | ||
| 490 |
|
19년 전 | 2142 | |
| 489 |
|
19년 전 | 2230 | |
| 488 |
|
19년 전 | 2033 | |
| 487 |
|
19년 전 | 1963 | |
| 486 |
|
19년 전 | 1963 | |
| 485 |
|
19년 전 | 2171 | |
| 484 |
|
19년 전 | 3238 | |
| 483 |
|
19년 전 | 3121 | |
| 482 |
|
19년 전 | 2876 | |
| 481 |
|
19년 전 | 2580 | |
| 480 |
|
19년 전 | 2654 | |
| 479 |
|
19년 전 | 2322 | |
| 478 |
|
19년 전 | 2351 | |
| 477 |
개발자관리자
|
19년 전 | 1614 | |
| 476 |
개발자관리자
|
19년 전 | 2327 | |
| 475 |
개발자관리자
|
19년 전 | 2676 | |
| 474 |
개발자관리자
|
19년 전 | 2677 | |
| 473 |
개발자관리자
|
19년 전 | 2993 | |
| 472 | 19년 전 | 2758 | ||
| 471 | 19년 전 | 1758 | ||
| 470 | 19년 전 | 1855 | ||
| 469 |
|
19년 전 | 2759 | |
| 468 |
|
19년 전 | 2248 | |
| 467 |
|
19년 전 | 4019 | |
| 466 |
|
19년 전 | 2536 | |
| 465 | 19년 전 | 2400 | ||
| 464 | 19년 전 | 3545 | ||
| 463 |
|
19년 전 | 3121 | |
| 462 |
|
19년 전 | 2265 | |
| 461 |
|
19년 전 | 3059 | |
| 460 |
|
19년 전 | 2268 | |
| 459 |
|
19년 전 | 3143 | |
| 458 |
|
19년 전 | 3558 | |
| 457 |
|
19년 전 | 5237 | |
| 456 |
|
19년 전 | 3158 | |
| 455 |
스마일미디어
|
19년 전 | 3150 | |
| 454 |
스마일미디어
|
19년 전 | 2745 | |
| 453 |
스마일미디어
|
19년 전 | 2487 | |
| 452 |
스마일미디어
|
19년 전 | 2743 | |
| 451 |
스마일미디어
|
19년 전 | 2463 | |
| 450 |
스마일미디어
|
19년 전 | 2590 | |
| 449 |
스마일미디어
|
19년 전 | 2384 | |
| 448 |
스마일미디어
|
19년 전 | 2706 | |
| 447 | 19년 전 | 2972 | ||
| 446 |
스마일미디어
|
19년 전 | 3256 | |
| 445 |
스마일미디어
|
19년 전 | 7062 | |
| 444 |
스마일미디어
|
19년 전 | 5177 | |
| 443 |
스마일미디어
|
19년 전 | 2445 | |
| 442 |
스마일미디어
|
19년 전 | 5189 | |
| 441 |
스마일미디어
|
19년 전 | 3122 | |
| 440 |
|
19년 전 | 2490 | |
| 439 | 19년 전 | 2181 | ||
| 438 | 19년 전 | 3581 | ||
| 437 |
|
19년 전 | 2878 | |
| 436 |
|
19년 전 | 3259 | |
| 435 |
|
19년 전 | 2905 | |
| 434 | 19년 전 | 3401 | ||
| 433 |
sjsjin
|
19년 전 | 2734 | |
| 432 |
sjsjin
|
19년 전 | 3470 | |
| 431 |
sjsjin
|
19년 전 | 2436 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기