PHP GET / POST 개념 및 사용방법

2017. 8. 17. 20:19WebHacking/Web




[ GET Method]


[ 특징 ]

  메시지 바디가 없음

=>메시지 헤더를 통해서만 전달

=> request 라인의 URI필드를 통해서 전달

=> 데이터의 크기에 한계가 있음 / 헤더의 크기를 넘어 갈 수 없다

=> 전달하려는 데이터가 외부에 노출되어서 보안상 취약하다


[ php 소스코드 ]    - #vi /var/www/html/info.php


소스코드에서 사용한 $_GET , $_REQUEST 변수는 슈퍼 글로벌 변수이다

GET메서드를 사용해서 데이터를 전달하면 $_GET 변수와 $_REQUEST변수에 자동적으로 그 값들이 저장된다

$_GET[name] , $_GET[age]    : $_GET변수의 각 index명에 해당하는 요소들의 값을 출력하도록 설계하였다


[ php 실행 페이지 ]


주소창에 " 192.168.6.123/info.php?name=kim&age=25 " 를 입력하고 이동해보자

" ? " 구분자로사용해서 변수를 지정해서 GET메서드를 통해 데이터를 전달할 수 있다

슈퍼 글로벌 변수 $_GET의 요소들로 $_GET[name] = kim , $_GET[age] = 25 값들이 저장되었음을 확인할 수 있다

( $_REQUEST 변수에도 똑같이 저장되어진다 )


[ 와이어샤크 캡쳐 화면 ] - HTTP GET Method


GET메서드를 통해서 해당 웹페이지에 이동하는 패킷을 캡쳐한 화면입니다

우리가 사용하는 변수들이 헤더에 그대로 나타나는 것을 확인할 수 있습니다

=> 보안상 매우 취약하므로 중요한 데이터를 전달할 때에는 POST메서드를 사용해야합니다



* 참고 설정 ( php 설정파일 /etc/php.ini )


#vi /etc/php.ini

register_globals = Off => On


해당 설정을 On으로 변경시켜주면 웹 페이지에서 변수를 초기화 시키면 해당 변수는 자동으로 슈퍼 글로벌 변수로 지정된다

따라서 우리는 해당 변수를 웹 페이지에서 쉽게 사용할 수 있습니다 ( 실습을 위해서 On 으로 바꿔둔 것)



[ POST Method ]


[ 특징 ]

  메시지 바디가 있음 - 바디를 통해서 데이터를 전달한다

1> 전달하려는 데이터의 크기의 제한이 없다

2> 전달하려는 데이터가 외부에 쉽게 노출되지 않는다

3> 반드시 form 태그가 있어야한다 ( 회원가입, 로그인 등등... )


[ html 소스코드 ] - #vi /var/www/html/input.html


< form method=POST action=info.php >

=> POST메서드를 사용하겠다 / 데이터는 같은 디렉토리 안에 있는 info.php 페이지로 전송하겠다

폼 태그안에 이름과 나이를 입력할 수 있는 input태그와 해당 데이터들을 전송할 수있게 하는 submit을 생성시켰습니다


[ html 실행 페이지 ]


전송하기 버튼을 누르면 해당 데이터는 192.168.6.123/info.php 페이지로 전송되고 페이지는 이동된다 

( 아래 php 출력화면을 보면됩니다 )


[ php 소스코드 ] - #vi /var/www/html/info.php


$_GET , $_REQUEST , $_POST 각 변수들을 출력해보겠습니다

20,21번 줄의 $name , $age 변수들은 위에서 php.ini 설정파일을 변경해서 직접 변수를 사용할 수 있게한 것


[ php 실행 페이지 ]


$_GET 변수에는 아무것도 저장되지 않지만 $_REQUEST , $_POST 변수에 저장됩니다


[ 와이어샤크 캡쳐화면 ] - HTTP POST Method


POST메서드를 이용한 HTTP통신 패킷을 캡쳐한 화면입니다

GET 메서드와는 다르게 POST메서드는 메시지 바디안에 암호화되어서 전송되어집니다

따라서 패킷을 도청당하지만 않는다면 GET과는 다르게 메시지 안의 내용이 노출되어지지않습니다