register_globals 옵션에 따른 변수 전달

보안상의 이유로 php.ini 파일의 register_globals 옵션을 off로 설정해 놓은 웹서버들이 많이 있으며,  이런 경우는 form 을 통해서 변수를 전달 할 때 아래와 같이 제약을 받게 된다.

ex>

입력 폼
=============================================
<form method=”post” action=”result.php”>
<input type=”text” name=”subject” size=”20″ maxlength=”10″>
<input type=”submit” value=”확인”>
</form>
=============================================

register_globals = on 일때

form으로부터 전달 받은 변수를 $_POST[subject], $subject 등과 같이 사용 할 수 있다.

result.php
===================================
<?
echo(“$subject”);        <— 사용가능
echo(“$_POST[subject]”);  <— 사용가능
?>
===================================

register_globals = off 일때

form으로부터 전달 받은 변수를 $subject 와 같은 형식으로는 사용할 수 없으며, $_POST[subject]의 형식으로 사용이 가능하다.

result.php
===================================
<?
echo(“$subject”);        <— 사용 불가능
echo(“$_POST[subject]”);  <— 사용 가능
?>
===================================

단, 아래와 같이 result.php상단에 아래와 같은 형식으로 extract 선언을 하거나, header 파일에 선언하여 include 한 후에는 $subject 와 같은 형식으로 변수 사용이 가능하다.

result.php
===================================
<?
@extract($_GET);
@extract($_POST);
@extract($_SERVER);

echo(“$subject”);        <— 사용가능
echo(“$_POST[subject]”);  <— 사용가능
?>
===================================

-tip
서버의 정책이 register_globals=off 일때, 특정 가상호스트나, 특정 디렉토리 하위에서 register_globals=on 으로 사용 가능하다.
가상호스트 설정 부분에 아래와 같이 php_flag 옵션으로 추가를 하거나, 특정 디렉토리 내에 .htaccess 파일을 생성해서 php_flag register_globals on 을 추가하고 사용하면 된다.

<VirtualHost xxx.xxx.xxx.xxx>

php_flag register_globals on

</VirtualHost>