호스팅 서버 같은 곳에서 보안상의 이유로 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>
게시판 목록
프로그램
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|
| 8030 | 9년 전 | 337 | ||
| 8029 | 9년 전 | 280 | ||
| 8028 | 9년 전 | 246 | ||
| 8027 | 9년 전 | 261 | ||
| 8026 | 9년 전 | 300 | ||
| 8025 | 9년 전 | 359 | ||
| 8024 | 9년 전 | 323 | ||
| 8023 | 9년 전 | 377 | ||
| 8022 | 9년 전 | 303 | ||
| 8021 | 9년 전 | 302 | ||
| 8020 | 9년 전 | 298 | ||
| 8019 | 9년 전 | 326 | ||
| 8018 | 9년 전 | 422 | ||
| 8017 | 9년 전 | 522 | ||
| 8016 | 9년 전 | 312 | ||
| 8015 | 9년 전 | 374 | ||
| 8014 | 9년 전 | 310 | ||
| 8013 | 9년 전 | 218 | ||
| 8012 | 9년 전 | 235 | ||
| 8011 | 9년 전 | 433 | ||
| 8010 | 9년 전 | 286 | ||
| 8009 | 9년 전 | 272 | ||
| 8008 | 9년 전 | 274 | ||
| 8007 | 9년 전 | 413 | ||
| 8006 | 9년 전 | 450 | ||
| 8005 |
|
9년 전 | 950 | |
| 8004 | 9년 전 | 331 | ||
| 8003 | 9년 전 | 397 | ||
| 8002 | 9년 전 | 307 | ||
| 8001 |
|
9년 전 | 650 | |
| 8000 | 9년 전 | 397 | ||
| 7999 | 9년 전 | 360 | ||
| 7998 | 9년 전 | 411 | ||
| 7997 | 9년 전 | 295 | ||
| 7996 | 9년 전 | 526 | ||
| 7995 | 9년 전 | 427 | ||
| 7994 | 9년 전 | 270 | ||
| 7993 | 9년 전 | 353 | ||
| 7992 | 9년 전 | 493 | ||
| 7991 | 9년 전 | 229 | ||
| 7990 | 9년 전 | 253 | ||
| 7989 | 9년 전 | 286 | ||
| 7988 | 9년 전 | 710 | ||
| 7987 | 9년 전 | 401 | ||
| 7986 | 9년 전 | 397 | ||
| 7985 | 9년 전 | 484 | ||
| 7984 | 9년 전 | 416 | ||
| 7983 | 9년 전 | 636 | ||
| 7982 | 9년 전 | 499 | ||
| 7981 | 9년 전 | 445 | ||
| 7980 | 9년 전 | 470 | ||
| 7979 | 9년 전 | 443 | ||
| 7978 | 9년 전 | 422 | ||
| 7977 | 9년 전 | 356 | ||
| 7976 | 9년 전 | 827 | ||
| 7975 | 9년 전 | 348 | ||
| 7974 | 9년 전 | 375 | ||
| 7973 | 9년 전 | 580 | ||
| 7972 | 9년 전 | 368 | ||
| 7971 | 9년 전 | 432 | ||
| 7970 | 9년 전 | 282 | ||
| 7969 | 9년 전 | 527 | ||
| 7968 | 9년 전 | 366 | ||
| 7967 | 9년 전 | 347 | ||
| 7966 | 9년 전 | 345 | ||
| 7965 |
|
9년 전 | 1000 | |
| 7964 | 9년 전 | 386 | ||
| 7963 | 9년 전 | 372 | ||
| 7962 | 9년 전 | 353 | ||
| 7961 |
전갈자리남자
|
9년 전 | 494 | |
| 7960 | 9년 전 | 945 | ||
| 7959 | 9년 전 | 537 | ||
| 7958 | 9년 전 | 392 | ||
| 7957 | 9년 전 | 350 | ||
| 7956 | 9년 전 | 361 | ||
| 7955 | 9년 전 | 420 | ||
| 7954 | 9년 전 | 349 | ||
| 7953 | 9년 전 | 410 | ||
| 7952 | 9년 전 | 330 | ||
| 7951 | 9년 전 | 472 | ||
| 7950 | 9년 전 | 367 | ||
| 7949 | 9년 전 | 374 | ||
| 7948 | 9년 전 | 312 | ||
| 7947 | 9년 전 | 914 | ||
| 7946 | 9년 전 | 404 | ||
| 7945 | 9년 전 | 367 | ||
| 7944 | 9년 전 | 378 | ||
| 7943 | 9년 전 | 353 | ||
| 7942 | 9년 전 | 388 | ||
| 7941 | 9년 전 | 371 | ||
| 7940 | 9년 전 | 858 | ||
| 7939 | 9년 전 | 310 | ||
| 7938 | 9년 전 | 356 | ||
| 7937 | 9년 전 | 259 | ||
| 7936 | 9년 전 | 862 | ||
| 7935 | 9년 전 | 405 | ||
| 7934 | 9년 전 | 380 | ||
| 7933 | 9년 전 | 459 | ||
| 7932 | 9년 전 | 429 | ||
| 7931 | 9년 전 | 491 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기