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>