호스팅 서버 같은 곳에서 보안상의 이유로 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>
게시판 목록
프로그램
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|
| 1530 |
1111111
|
18년 전 | 1952 | |
| 1529 |
행복속네잎크로버
|
18년 전 | 3447 | |
| 1528 |
행복속네잎크로버
|
18년 전 | 1828 | |
| 1527 |
1111111
|
18년 전 | 7639 | |
| 1526 |
1111111
|
18년 전 | 3284 | |
| 1525 |
행복속네잎크로버
|
18년 전 | 1268 | |
| 1524 |
행복속네잎크로버
|
18년 전 | 2300 | |
| 1523 |
행복속네잎크로버
|
18년 전 | 3502 | |
| 1522 |
행복속네잎크로버
|
18년 전 | 2358 | |
| 1521 |
행복속네잎크로버
|
18년 전 | 2124 | |
| 1520 |
행복속네잎크로버
|
18년 전 | 2756 | |
| 1519 |
행복속네잎크로버
|
18년 전 | 3716 | |
| 1518 |
행복속네잎크로버
|
18년 전 | 3480 | |
| 1517 |
행복속네잎크로버
|
18년 전 | 2559 | |
| 1516 |
행복속네잎크로버
|
18년 전 | 1910 | |
| 1515 |
행복속네잎크로버
|
18년 전 | 1928 | |
| 1514 |
행복속네잎크로버
|
18년 전 | 2503 | |
| 1513 |
행복속네잎크로버
|
18년 전 | 1981 | |
| 1512 | 18년 전 | 2868 | ||
| 1511 | 18년 전 | 1659 | ||
| 1510 | 18년 전 | 2205 | ||
| 1509 | 18년 전 | 1679 | ||
| 1508 | 18년 전 | 2137 | ||
| 1507 | 18년 전 | 2356 | ||
| 1506 | 18년 전 | 2291 | ||
| 1505 | 18년 전 | 2245 | ||
| 1504 | 18년 전 | 2172 | ||
| 1503 | 18년 전 | 3482 | ||
| 1502 | 18년 전 | 1662 | ||
| 1501 | 18년 전 | 3439 | ||
| 1500 | 18년 전 | 2018 | ||
| 1499 | 18년 전 | 5288 | ||
| 1498 | 18년 전 | 2149 | ||
| 1497 |
hsp1980
|
18년 전 | 2329 | |
| 1496 |
hsp1980
|
18년 전 | 1723 | |
| 1495 |
hsp1980
|
18년 전 | 2131 | |
| 1494 |
hsp1980
|
18년 전 | 3644 | |
| 1493 | 18년 전 | 1497 | ||
| 1492 | 18년 전 | 1737 | ||
| 1491 | 18년 전 | 4315 | ||
| 1490 | 18년 전 | 3702 | ||
| 1489 | 18년 전 | 3262 | ||
| 1488 | 18년 전 | 3363 | ||
| 1487 |
mixdesign
|
18년 전 | 3863 | |
| 1486 |
mixdesign
|
18년 전 | 4322 | |
| 1485 | 18년 전 | 4246 | ||
| 1484 | 18년 전 | 2700 | ||
| 1483 |
hsp1980
|
18년 전 | 2309 | |
| 1482 |
hsp1980
|
18년 전 | 3245 | |
| 1481 |
hsp1980
|
18년 전 | 3160 | |
| 1480 |
hsp1980
|
18년 전 | 3317 | |
| 1479 | 18년 전 | 3254 | ||
| 1478 |
|
18년 전 | 4921 | |
| 1477 |
|
18년 전 | 5205 | |
| 1476 | 18년 전 | 3402 | ||
| 1475 |
mixdesign
|
18년 전 | 2715 | |
| 1474 |
mixdesign
|
18년 전 | 2939 | |
| 1473 |
mixdesign
|
18년 전 | 2266 | |
| 1472 |
mixdesign
|
18년 전 | 2084 | |
| 1471 |
mixdesign
|
18년 전 | 2033 | |
| 1470 |
|
18년 전 | 3071 | |
| 1469 |
mixdesign
|
18년 전 | 2351 | |
| 1468 |
mixdesign
|
18년 전 | 2369 | |
| 1467 |
mixdesign
|
18년 전 | 2049 | |
| 1466 |
mixdesign
|
18년 전 | 2418 | |
| 1465 |
mixdesign
|
18년 전 | 3151 | |
| 1464 | 18년 전 | 4080 | ||
| 1463 | 18년 전 | 3368 | ||
| 1462 |
|
18년 전 | 1997 | |
| 1461 |
|
18년 전 | 1939 | |
| 1460 | 18년 전 | 2855 | ||
| 1459 | 18년 전 | 1648 | ||
| 1458 |
|
18년 전 | 1999 | |
| 1457 |
mixdesign
|
18년 전 | 2290 | |
| 1456 |
mixdesign
|
18년 전 | 2153 | |
| 1455 | 18년 전 | 2261 | ||
| 1454 | 18년 전 | 4029 | ||
| 1453 | 18년 전 | 1773 | ||
| 1452 | 18년 전 | 4385 | ||
| 1451 | 18년 전 | 2916 | ||
| 1450 | 18년 전 | 2215 | ||
| 1449 | 18년 전 | 3267 | ||
| 1448 | 18년 전 | 2894 | ||
| 1447 | 18년 전 | 2823 | ||
| 1446 | 18년 전 | 5625 | ||
| 1445 | 18년 전 | 2290 | ||
| 1444 | 18년 전 | 3407 | ||
| 1443 |
|
18년 전 | 3321 | |
| 1442 | 18년 전 | 3706 | ||
| 1441 | 18년 전 | 3260 | ||
| 1440 | 18년 전 | 2435 | ||
| 1439 | 18년 전 | 2083 | ||
| 1438 | 18년 전 | 2537 | ||
| 1437 | 18년 전 | 6105 | ||
| 1436 | 18년 전 | 2731 | ||
| 1435 | 18년 전 | 4542 | ||
| 1434 | 18년 전 | 2037 | ||
| 1433 | 18년 전 | 10024 | ||
| 1432 | 18년 전 | 2473 | ||
| 1431 |
Psychedelico
|
18년 전 | 1538 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기