본문 바로가기

웹 보안

MVC 패턴

반응형

MVC 패턴 이란

소프트웨어 디자인 패턴 중 하나로 "Model - View - Controller" 의 약자

Model과 View, Controller는 밑의 그림과 같은 흐름으로 이뤄진다.
 

 
사용자는 View를 통해서 UI를 확인하고 사용자가 Controller에 내린 명령을 통해 View에서 그 결과를 확인할 수 있다.
명령을 받은 Controller는 Model에게서 data를 받아오고 받아온 data를 통해 View에서 보여준다.
간단하게 표현하면 Model, View, Controller는 다음과 같다.
 
 

Model = DB
View = Web
Controller = WAS

 
controller 파일은 .do 확장자를 가진 파일이며 사용자가 요청한 data에 대해 동적으로 이를 DB로 전달하게 된다.
해당 과정이 바로 client - WEB - WAS 와 같은 구조에서 이뤄지는 형태다.
Client - WEB - WAS - DB 구조는 밑의 그림과 같이 이뤄진다. 이쯤 되면 Servlet에 대한 이해가 필요하다.
 
 

 
 
WAS와 WEB server를 분리해서 사용하는 이유는 바로 동적인 페이지를 WAS에서 처리하고
정적인 페이지를 WEB server에서 처리하여 작업 부하를 분할하여 처리하기 위함이다.
이 때, WAS로 동적 웹 페이지를 만들기 위해 필요한 기술이 바로 Servlet이다.
 
원래 Servlet은 WAS 내에서 실행되다가 Client가 특정 동적인 요청을 던지면 해당 기능을 수행한 후,
웹 브라우저로 그 결과를 전송한다.
Servlet의 주요 특징은 다음과 같이 정리해볼 수 있다.
 
 

- Client의 request에 대해 동적으로 동작
- MVC 페턴에서 Controller 역할
- JAVA의 스레드를 이용하여 동작
- Container에서 실행

 
 
Servlet의 동작과정을 자세히 들여다보면 밑의 그림과 같이 동작한다.
 

 

1. 클라이언트 요청
2. HttpServletRequest, HttpServletResponse 객체 생성
3. Web.xml이 어느 서블릿에 대해 요청한 것인지 탐색
4. 해당하는 서블릿에서 service() 메소드 호출 
5. doGet() 또는 doPost() 호출 
6. 동적 페이지 생성 후 ServletResponse 객체에 응답 전송
7. HttpServletRequest, HttpServletResponse 객체 소멸

 
 
여기서 중요하게 봐야하는 부분이 바로 web.xml 이다.
Servlet/JSP 규약은 Web Application 이 특정 폴더 구조를 따르도록 제한하고 있으므로 이를 파악하고 넘어가야 한다!
그 특정 폴더들 중 먼저 볼 폴더는 바로 /WEB-INF 폴더다.
Apache Tomcat WAS를 쓰다보면 /WEB-INF/web.xml 경로를 본 기억이 있을 것이다.
WEB-INF 디렉토리는 Client가 외부에서 접근하여 볼 수 없도록
WAS 내에서 동적으로 처리하기 위한 파일들을 모아둔 디렉토리라고 할 수 있다.
즉, 외부에서는 접근 불가능한 페이지들이 모인 디렉토리라고 생각하면 된다. 
 
web.xml 파일 또한 그렇다. 외부에서 접근할 수 없는 설정파일로써
위의 두 번째 순서를 통해 생성된 Servlet 객체를 사용자가 요청한 경로와 mapping을 시켜주는 역할을 한다.
즉, Web component 역할을 수행한다고 생각하면 된다.
 
그래서, 외부에서 접속하여 view를 확인할 수 있는 페이지는 web 디렉토리에 배치를 하지만,
직접적으로 view를 확인할 수 없고, <a> tag를 통해서 해당 페이지로 이동하는 것이 아닌 Controller를 통해 이동하려면
/WEB-INF 디렉토리에 파일들을 배치한다.
만약, /WEB-INF 디렉토리 내에 있는 페이지로 접근하게 되면 다음과 같이 error 페이지를 반환하게 된다.
 

 
 
위와 같이 error 페이지를 반환하게 되면 현재 접속한 사이트의 WAS 정보가 노출되게 되는데
이러한 노출 또한 공격자들에게 정보가 될 수 있기 때문에 error 발생 시 다른 페이지로 리다이렉트하도록 설정해야 한다.
WEB-INF 디렉토리 내부의 세부적인 디렉토리 트리 구조는 다음과 같다. 참고하면 좋을 듯...!

 
 

1. WEB-INF : WEB application 설정 정보를 담고 있는 web.xml 파일이 위치한 폴더
2. WEB-INF/classes : WEB application에서 사용하는 class file들이 위치한 폴더
3. WEB-INF/lib : WEB application에서 사용하는 jar 파일이 위치한 폴더

 
 
 
WEB-INF 디렉토리만큼 중요한 디렉토리가 한 가지 더 있는데 바로 META-INF 디렉토리다.
META-INF 디렉토리는 manifest 파일을 포함하고 있는 디렉토리로 활용되며 이는 일종의 jar 파일의 사용 메뉴얼,
스펙을 가지고 있는 사용설명서라고 볼 수 있다.
실행되는 main 함수가 어떤 class에 위치하고 있는지, 프로그램의 보안정책 정보 등을 포함하고 있다.
파일 경로는 다음과 같다. (/META-INF/manifest.mf)
 
 
 
 
 
취약점 진단을 통해서 이러한 형태를 종종 볼텐데 전반적인 웹 구조를 빠르게 이해하는 능력이 필요할 것 같아 정리해본다.
 
 
 
출처: https://velog.io/@langoustine/%EC%97%AC%EA%B8%B0%EB%8F%84-MVC-%EC%A0%80%EA%B8%B0%EB%8F%84-MVC-MVC-%ED%8C%A8%ED%84%B4%EC%9D%B4-%EB%AD%90%EC%95%BC

여기도 MVC, 저기도 MVC! MVC 패턴이 뭐야?

어딜가든 MVC에 대해서 많이 듣고 접하게 되는데 과연 MVC 패턴은 무엇이고 왜 등장했는지, 더 나아가 MVC의 필요성과 한계점은 무엇인지 학습하고 고민한 내용을 기록하였습니다.

velog.io

 
https://javacpro.tistory.com/43

[JSP] JSP (JavaServer Pages ) 란 무엇인가?

JSP (JavaServer Pages ) 란 무엇인가? JSP 란 JavaServer Pages 의 약자이며HTML 코드에 JAVA 코드를 넣어 동적웹페이지를 생성하는 웹어플리케이션 도구이다.JSP 가 실행되면 자바 서블릿(Servlet) 으로 변환되며

javacpro.tistory.com

 
https://velog.io/@falling_star3/Tomcat-%EC%84%9C%EB%B8%94%EB%A6%BFServlet%EC%9D%B4%EB%9E%80

[Servlet] 서블릿(Servlet)이란?

서블릿의 개념과 동작 과정, 생명주기(메서드), 인터페이스, 서블릿 컨테이너에 대해 공부하고 정리한 내용입니다.

velog.io

 
https://velog.io/@jsj3282/%EC%9B%B9-%EC%96%B4%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%ED%8F%B4%EB%8D%94-%EA%B5%AC%EC%84%B1%EA%B3%BC-URL-%EB%A7%A4%ED%95%91

velog

velog.io

 

반응형

'웹 보안' 카테고리의 다른 글

HTTP Smuggling  (0) 2024.06.07
JWT 인증 우회  (1) 2024.02.05
HTTP method status code  (0) 2023.11.08
Blind SQL injection  (0) 2023.02.06
Non-Blind SQL injection  (0) 2022.12.13