웹마스터 팁

이야~ 벌써 네번째네요~ ^^
저도 하던 작업이 있어서 우선은 여기까지만 강의하고 며칠 뒤에 또 올릴께요~

php.ini 에 register_globals 라는 옵션이 있고 대부분의 웹호스팅에서는 이 옵션이 On 되어있습니다. 되게 편하기는 한 옵션입니다.

예를 들어, test.php?name=행복한고니 라고 URL을 입력하면...

<?php echo $name ?>

과 같이 간단하게 받아올 수 있으니까요... 그렇지만 이 경우 보안상에는 꽤 문제가 될 수도 있습니다.
register_globals 옵션을 켜두게 되면 쿠키, 세션, GET, POST 모두가 전역 변수로 등록됩니다. 여기에서 문제가 발생하죠. 만약 변수명이 같게 되면 어느 쪽이던지 데이타가 사라져 버리게 됩니다. 조심해야할 문제죠. 더군다나 보안상의 위험이 생길 수도 있습니다. 그래서 세션이나 쿠키같은 값은 대게 $_SESSION 이나 $_COOKIE 와 같은 시스템 변수로 받아오는 것이 안전하며, 이것은 GET이나 POST에도 마찬가지로 적용됩니다.

사용자가 지정해주지 않아도 미리 생겨있는 $_SESSION, $_COOKIE 같은 변수들을 Predefined variables(미리정의된 변수) 라고 하며, 다음과 같습니다. 각각의 변수들은 전부 배열로 표현되며 $_SERVER[PHP_SELF] 와 같이 값을 사용합니다.

$GLOBALS
전역변수, 글로벌 변수라고 부릅니다. 말 그대로 현재의 프로그램 전체에 걸쳐서 영향을 미치는 변수입니다.

$_SERVER - 4.1.0 이하는 $HTTP_SERVER_VARS
서버의 환경값이 있는 변수입니다.
...PHP_SELF : 현재 실행되는 PHP프로그램의 경로를 알려줍니다.
...argv : GET방식으로 전달받을 때는 이 곳에 쿼리문 전체(예를들어. test.php?num=123&name=고니 중 num=123&name=고니)를 저장해두며, 쉘 상에서 실행될때는 이곳에 전달받은 argument 값들을 저장합니다.
...argc : 쉘 상에서 실행되었을 경우, 전달받은 파라미터의 갯수를 저장합니다.
...GATEWAY_INTERFACE : 서버가 사용하는 CGI 사양을 알려줍니다. 보통은 CGI/1.1 처럼 출력됩니다.
...SERVER_NAME : 서버의 이름입니다.
...SERVER_SOFTWARE : 서버가 사용하는 소프트웨어를 알려줍니다. 저의 경우에는 Apache/1.3.24 With MMAP/EAPI (Win32) PHP/4.1.2 mod_ssl/2.8.8 OpenSSL/0.9.6c 로 출력되네요.
...SERVER_PROTOCOL : 서버의 프로토콜을 알려줍니다. 당연히 Web 서버이니까 HTTP 입니다.
...REQUEST_METHOD : 페이지 요청 방식을 알려줍니다. GET, HEAD, POST, PUT 등이 있습니다.
...QUERY_STRING : 쿼리문 전체를 알려줍니다.
나머지는 대강 생략하고... 다시 몇 가지...
...HTTP_HOST : 현재의 서버 도메인을 알려줍니다.
...HTTP_REFERER : 현재 문서의 바로 전 문서를 알려줍니다. 어디서 왔는지 알 수 있죠.
...HTTP_USER_AGENT : 사용자의 웹브라우저 종류를 알 수 있습니다.
...REMOTE_ADDR : 사용자의 IP주소 입니다.
...PHP_AUTH_USER : 인증을 거쳤을 때의 사용자아이디입니다.
...PHP_AUTH_PW : 인증을 거쳤을 때의 사용자패스워드입니다.
...PHP_AUTH_TYPE : 인증 방식입니다.

$_GET - 4.1.0 이하는 $HTTP_GET_VARS
GET방식으로 전달받은 값들이 저장되는 변수입니다.
GET방식이란 test.php?num=1234 와 같이 주소표시줄에서 전달받는 방식을 말합니다.
전달받은 변수는 $_GET[num] 과 같이 사용할 수 있습니다.

$_POST - 4.1.0 이하는 $HTTP_POST_VARS
POST방식으로 전달받은 값들이 저장되는 변수입니다.
전달받은 변수는 $_POST[변수명]과 같이 사용할 수 있습니다.

$_COOKIE - 4.1.0 이하는 $HTTP_COOKIE_VARS
쿠키값이 저장되는 변수입니다.
전달받은 변수는 $_COOKIE[쿠키명]과 같이 사용할 수 있습니다.

$_FILES - 4.1.0 이하는 $HTTP_POST_FILES
업로드한 파일값을 저장하는 변수입니다.


$_ENV - 4.1.0 이하는 $HTTP_ENV_VARS
여러가지 환경값이 저장되는 변수입니다.

$_SESSION - 4.1.0 이하는 $HTTP_SESSION_VARS
세션값이 저장되는 변수입니다.
전달받은 변수는 $_SESSION[세션명]과 같이 사용할 수 있습니다.


그냥 이런 변수들이 있구나... 하는 것 정도만 알고 가시면 됩니다. $_GET 이나 $_POST 등은 PHP내부적으로 자동 등록되므로 register_globals 옵션에 관계없이 사용할 수 있으며 PHP 버전 4.1.0 이상이어야 사용가능합니다. ^^ 4.1.0이하에서 사용한 것들도 아직까지는 사용할 수 있지만 곧 지원되지 않을 예정이라고 하므로 가급적이면 사용을 피하는 것이 좋습니다.

### 오늘 생각해볼 것
1. 현재 실행되고 있는 파일명을 출력하라.
2. 사용자의 IP를 출력하라.