1. APM 사용하기


APM 이란 Apache, PHP , Mysql을 묶어 사용하는 형태다.


아파치는 웹 서버로, Mysql은 데이터 베이스 관리 시스템으로 사용되며 PHP와 함께 사용할시에 호환성이 좋아


흔히 사용되는 조합이다.


○ Apache 


아파치는 웹 서버 프로그램 중 하나로 PHP가 제공한 HTML 파일을 HTTP 규약에 따라 클라이언트의 컴퓨터에 전송한다.


성능이 좋고, 대부분의 운영체제에서 사용할 수 있어 많이 이용된다.


○ PHP 


웹 프로그래밍 언어로서 PHP 문법에 작성된 프로그램을 내장된 해석기를 통해 HTML 형태로 변환해 웹 서버인 Apache에 제공한다.


○ Mysql


아파치, PHP와 함께 쓰이는 DBMS (데이터 베이스 관리 시스템) 중 하나로 각종 데이터를 저장, 관리 한다. 무료고 성능이 좋아 널리 사용된다.



2. 세 프로그램의 통신 과정


클라이언트의 요청에 따라 서버 내부의 세 프로그램은 어떻게 작동하는지 살펴 보자


1. 클라이언트가 웹 브라우저에 URL을 입력하고 원하는 정보를 서버에 요청한다.


2. 아파치 프로그램은 접속을 승인한다.


3. 아파치는 데이터베이스에 저장된 데이터를 가져오라고 PHP에 명령한다.


4. PHP는 API함수를 이용해 데이터베이스에 저장된 데이터를 가져오라는 명령을 MYSQL에 내린다.


5. MYSQL은 저장된 데이터를 PHP에 돌려준다.


6. PHP는 데이터베이스에서 가져온 데이터와 PHP 코드를 모두 HTML 형태로 변경한 다음, HTML 파일을 아파치에 전달한다.


7. 아파치는 완성된 HTML 파일을 클라이언트 측의 컴퓨터 웹 브라우저에 전달한다.



이 통신과정을 이해했다면 전편의, "PHP의 연산은 어떤 컴퓨터가 하게 되는가?" 에 대한 질문에 답할 수 있다.


정답은 서버측 컴퓨터이다. 서버측에서 작성된 PHP 코드를 처리하고 그 ""결과""만을 ""HTML""의 형태로


즉, 고정된 형태로 아파치에 제공하며, 그것이 곧 클라이언트가 받게될 파일이다.


클라이언트는 컴퓨터가 처리한 ""결과""만 받기 때문에 어떤 연산 과정을 통해 이런 결과가 나왔는지 알수가 없다.


예를 들어


1 + 1 의 연산을 하고 출력을 하는 PHP 코드와 2^1 의 연산을 하고 출력하는 PHP 코드가 있다고 가정해보자


이 두 코드의 출력물은 모두 동일한 2이고, 클라이언트 화면에서 동일하게 2가 출력될것이다.


하지만 클라이언트 입장에서는 보여지는 2가 1+1의 연산을 통해 도출된 결과인지, 2^1의 연산의 결과인지 확인할 방법이 없다.


3. 자바스크립트와 PHP


웹 애플리케이션을 제작할 수 있는 언어에는 PHP 뿐만이 아니라 흔히 볼 수 있는 자바스크립트도 있다.


여기서는 자바스크립트와 PHP의 차이를 보안적인 측면에서 설명해보겠다.


자바스크립트는 HTML 파일에 같이 작성될 수 있고, HTML 파일과 같은 전송 형태를 띈다.


한번 작성된 코드는 코드 내용 그대로 클라이언트에게 전달된다. 즉, 클라이언트가 웹 페이지를 요청하면 아무런 작업도 하지 않고 그대로 전달만 해준다.


그렇다면 자바스크립트로 작성된 코드는 어떤 컴퓨터가 연산을 하는가, 바로 클라이언트의 컴퓨터다.


이점이 PHP와 자바스크립트의 뚜렷한 차이점이다. 이런 이유로 클라이언트는 앞의 예시에서


2의 연산결과가 1+1의 연산의 결과인지 2^1의 연산의 결과인지 당연히 구분할 수 있다.


그 코드 파일의 모든 내용을 서버로 부터 직접 받았고 코드의 연산을 클라이언트가 하기 때문이다.


이런 특징에 따라, 클라이언트 사이드 스크립트 (Client Side Script)와 서버 사이드 스크립트 (Server Side Script)로 구분할 수 있다.


연산이 클라이언트 쪽에서 실행되면 클라이언트 사이드 스크립트라 부르며, 반대로 PHP와 같이 서버 쪽에서 실행 되면 서버 사이드 스크립트라고 한다.


그럼 보안적인 측면에서 보았을때 어느쪽이 더 안전한가?


웹 애플리케이션의 전체 소스 코드가 보이지 않는 서버 사이드 스크립트 쪽이 더 안전하다고 예상할 수 있다.


웹 애플리케이션의 중요 부분이 (애플리케이션 기능의 핵심 코드나 현실의 재산, 생명과 연결되는 코드일 수 도 있다.) 클라이언트 사이드 스크립트로 작성된다면


코드의 내용이 사실상 모든 사람들에게 공개되며, 이런 상황을 이용해 해킹한다면, "웹 애플리케이션 로직 결함"을 이용할 수 있다. 


이 취약점은 이 후 웹 해킹에 관한 글을 쓸때 자세히 다룰 것이다. 


(실제로 아직도 서비스 되고 있는 많은 애플리케이션이 크고 작은 부분에서 이런 취약점을 갖고 있으며, 필자는 웹 애플리케이션 분석을 취미로 하면서 이런 부분들을 발견해 제보한 경험이 있다.)

'Web Programing > PHP' 카테고리의 다른 글

#6 PHP 프로그래밍 시작하기  (0) 2017.08.26
#5 PHP 기본 작성법  (0) 2017.08.26
#4 PHP 개발 환경 구축  (0) 2017.08.26
#2 PHP 작동 원리, 통신 원리  (0) 2017.08.23
#1. PHP 기본  (0) 2017.08.23

+ Recent posts