정보보안공부

웹보안_7. php 본문

정보보안/웹보안

웹보안_7. php

Steady_sp 2018. 2. 20. 09:21

PHP

WEB 2.0의 CGI란 무엇인가를 먼저 알아보자.

 

CGI란 웹서버와 외부 프로그램 사이에서 정보를 규고받는 방법이기도하고 사용자의 요청에 의한 서버의 응답이라고 할 수 있다. 간단히 말하면 두 개 이상의 컴퓨터간에 자료들을 주고받는 프로그램 또는 주고받는 것 자체를 의미한다.

웹 페이지는 HTML언어에 의해서 기본적으로 만들어지지만 HTML만으로 모든 정보를 다 처리할 수는 없다. 왜냐하면 HTML언어는 서버로부터 HTML문서를 보여주는 역할만 할뿐이다. 따라서 홈페이지를 양방향으로 할 필요성이 있다. 이를 위해여 여러방법중 하나가 외부프로그램을 수행하여 그 결과를 HTML형태로 보여주는 방식인데 이것을 CGI라고한다. 방명록과 게시판 메모장을 예로들수 있다.

 

데이터를 전달하는 방식에는 두가지 GET방식과 POST방식이 있다. 데이터를 어떻게 전달하고 어떤내용들을 주고받았는가 간단히 확인해보자

 

F12개발자 환경에 Network로 가면 해당정보들을 확인 할 수있다.

 

 

이제는 CGI를 사용하는 프로그램인 PHP에 대해서 살펴보도록 하자.

먼저 php실행기를 리눅스를 이용해 설치해보자

php는 서버쪽에서 실행되기 때문에 실행기를 설치해야한다.

 

 

yum search php를 입력하면 php를 검색해볼수 있다.

php.i686을 설치하려면 yum install php.686을 입력한다.

설치한 php의 버전을 보려면 php --version을 이용해 버전을 확인한다.

 

설치가끝나면 service httpd restart를 이용해 아파치를 재시작해준다. 재시작을 안하게되면 php파일이 실행되지 않을 수 있다.

 

이제부터 php파일을 만들고 실행할 수 있다.

php파일의 형식과 php에서 문자열을 출력할 수 있는 3가지 방법을 확인해보자.

 

형식은 <?php ...내용... ?>으로 작성되고 문자열을 출력할 수 있는 3가지 방법은 1. echo 2. print 3. printf가있다. 3번의 printf는 c언어와 똑같은 형식이다.

 

자바스크립트와 마찬가지로 문장을 한줄띄우려면 <br>을 이용한다.

해당문자열에 <br>을 추가하거나 "문자열" . "<br>"형태로 하면 <br>이 적용이된다.

.은 문자열을 이어주는 다른언어에서의 +역할이다.

 

 

만약 php에서 세미콜론을 안붙히거나 다른 에러가 났을때에는 에러를 찾기가 쉽지않다. javascript와는 달리 콘솔에서 에러메시지를 출력하지 않는다.

 

에러메시지를 출력하고싶다면 아래의 파일에 들어가서 설정을 변경해야한다.

 

 

 

display_errors = On을 하면 에러메시지를 본다는 뜻이다.

 

 

변경을 완료하면 아파치를 재시작해준다.

이제 php코드에서 에러가났을때 상황을 아래를 통해 확인해보자.

 

 

display_errors = Off일때는 해당 결과내용이 보이지않고 이때 에러메세지를 알기위해 display_errors = On을 한경우 몇번째줄에서 에러가 발생했는지 알려준다.

 

하지만 에러메시지는 출력하지 않는게 좋다. 보안상 문제가 발생한다.

php의 특징은 페이지 소스보기를 하면 어떠한 명령에 의해서 문자가 출력되는지 알 수 없다. 웹페이지 상에서의 출력내용은 자바스크립트와 다를점이 없지만 자바스크립트는 클라이언트에서 웹페이지에서 보여주는 화면이고 php는 서버로 전송해서 결과값을 받기때문에 페이지 소스보기를 통해 얻을수 있는 정보가 없다. 따라서 취약점은 전부 코드를 추측해서 취약점을 찾아야한다.

 

이처럼 echo로 문자열을 출력한지, print, printf를 사용했는지 알수가 없다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Comments