호스팅 서버 같은 곳에서 보안상의 이유로 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>
게시판 목록
프로그램
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|
| 830 |
|
19년 전 | 2192 | |
| 829 |
|
19년 전 | 1936 | |
| 828 |
|
19년 전 | 1818 | |
| 827 |
|
19년 전 | 1658 | |
| 826 |
|
19년 전 | 1856 | |
| 825 |
|
19년 전 | 1903 | |
| 824 |
|
19년 전 | 1959 | |
| 823 |
|
19년 전 | 2696 | |
| 822 |
|
19년 전 | 5334 | |
| 821 |
|
19년 전 | 1728 | |
| 820 |
|
19년 전 | 1584 | |
| 819 |
|
19년 전 | 1448 | |
| 818 |
|
19년 전 | 1611 | |
| 817 |
|
19년 전 | 1531 | |
| 816 |
|
19년 전 | 1450 | |
| 815 |
|
19년 전 | 1464 | |
| 814 |
|
19년 전 | 1386 | |
| 813 |
|
19년 전 | 1452 | |
| 812 | 19년 전 | 2827 | ||
| 811 |
pearly
|
19년 전 | 3844 | |
| 810 |
pearly
|
19년 전 | 5222 | |
| 809 |
|
19년 전 | 1388 | |
| 808 |
pearly
|
19년 전 | 4545 | |
| 807 | 19년 전 | 2983 | ||
| 806 |
|
19년 전 | 1507 | |
| 805 |
|
19년 전 | 2698 | |
| 804 |
|
19년 전 | 3624 | |
| 803 |
|
19년 전 | 1817 | |
| 802 |
|
19년 전 | 3794 | |
| 801 |
|
19년 전 | 1885 | |
| 800 | 19년 전 | 3773 | ||
| 799 | 19년 전 | 3442 | ||
| 798 | 19년 전 | 4211 | ||
| 797 | 19년 전 | 4082 | ||
| 796 |
|
19년 전 | 1900 | |
| 795 |
|
19년 전 | 1860 | |
| 794 | 19년 전 | 4281 | ||
| 793 | 19년 전 | 2677 | ||
| 792 | 19년 전 | 2552 | ||
| 791 | 19년 전 | 2408 | ||
| 790 | 19년 전 | 1986 | ||
| 789 | 19년 전 | 2598 | ||
| 788 | 19년 전 | 2212 | ||
| 787 | 19년 전 | 1854 | ||
| 786 | 19년 전 | 1979 | ||
| 785 | 19년 전 | 1449 | ||
| 784 |
|
19년 전 | 1700 | |
| 783 | 19년 전 | 2844 | ||
| 782 |
|
19년 전 | 1970 | |
| 781 | 19년 전 | 3257 | ||
| 780 | 19년 전 | 3164 | ||
| 779 |
|
19년 전 | 2253 | |
| 778 |
|
19년 전 | 1806 | |
| 777 | 19년 전 | 2847 | ||
| 776 | 19년 전 | 2914 | ||
| 775 | 19년 전 | 4025 | ||
| 774 |
|
19년 전 | 1996 | |
| 773 | 19년 전 | 2628 | ||
| 772 | 19년 전 | 2346 | ||
| 771 | 19년 전 | 3475 | ||
| 770 |
|
19년 전 | 1445 | |
| 769 | 19년 전 | 1508 | ||
| 768 | 19년 전 | 1779 | ||
| 767 | 19년 전 | 2206 | ||
| 766 | 19년 전 | 1837 | ||
| 765 | 19년 전 | 1698 | ||
| 764 |
|
19년 전 | 2117 | |
| 763 |
|
19년 전 | 2231 | |
| 762 |
|
19년 전 | 4965 | |
| 761 | 19년 전 | 2336 | ||
| 760 |
|
19년 전 | 3199 | |
| 759 | 19년 전 | 2646 | ||
| 758 |
|
19년 전 | 2410 | |
| 757 | 19년 전 | 4706 | ||
| 756 | 19년 전 | 2574 | ||
| 755 |
|
19년 전 | 2420 | |
| 754 |
|
19년 전 | 1970 | |
| 753 |
|
19년 전 | 1746 | |
| 752 |
pearly
|
19년 전 | 3376 | |
| 751 | 19년 전 | 2354 | ||
| 750 |
|
19년 전 | 6169 | |
| 749 | 19년 전 | 2043 | ||
| 748 |
|
19년 전 | 1912 | |
| 747 |
|
19년 전 | 2711 | |
| 746 |
|
19년 전 | 1825 | |
| 745 | 19년 전 | 2288 | ||
| 744 | 19년 전 | 2120 | ||
| 743 |
|
19년 전 | 3577 | |
| 742 | 19년 전 | 2588 | ||
| 741 | 19년 전 | 2752 | ||
| 740 |
|
19년 전 | 4377 | |
| 739 | 19년 전 | 3555 | ||
| 738 |
|
19년 전 | 2311 | |
| 737 | 19년 전 | 4321 | ||
| 736 | 19년 전 | 3279 | ||
| 735 |
홀로남은자
|
19년 전 | 4153 | |
| 734 |
홀로남은자
|
19년 전 | 2032 | |
| 733 |
홀로남은자
|
19년 전 | 2236 | |
| 732 | 19년 전 | 2148 | ||
| 731 | 19년 전 | 3362 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기