URL(Uniform Resource Locator)이란 사용자가 원하는 정보의 위치와 종류를 파악할 수 있도록 웹페이지의 정보 구조를 반영한 것이다.
웹 루트 경로(Web Root Path)는 웹 서버에서 클라이언트(사용자)가 요청한 웹 페이지나 파일이 실제로 저장되는 최상위 디렉터리
Apache 웹 서버: 기본적으로 /var/www/html 또는 /usr/local/apache2/htdocs 경로를 사용 (이번 모의해킹 실습에서는 Apache 웹 서버를 사용할 예정임)
Nginx 웹 서버: 기본적으로 /usr/share/nginx/html 경로를 사용
파일 저장: 웹 애플리케이션에서 필요한 모든 정적 파일(HTML, CSS, JavaScript, 이미지 등)을 저장하는 위치
보안: 웹 루트 경로 외부의 파일이나 디렉터리는 클라이언트가 직접 접근할 수 없으므로 보안을 강화하는 데 도움이 됨
URL 매핑: 클라이언트가 요청하는 URL과 실제 파일의 경로를 매핑하는 기준점이 됨 예를 들어, http://example.com/index.html이라는 URL은 웹 루트 경로 내의 index.html 파일을 참조함
웹 루트 경로를 적절하게 설정하고 관리하는 것은 웹 서버의 효율성과 보안을 유지하는 데 중요한 요소이다.
vi /etc/httpd/conf/httpd.conf

웹 루트 경로를 설정하는 부분은 DocumentRoot 부분이지만 접근 권한과 보안 관련 문제로 인해 Directory 부분도 같이 루트 경로에 맞게 수정해 줘야 한다.
"Index file"은 웹 서버에서 기본적으로 로드되는 파일을 의미 사용자가 웹 사이트의 특정 디렉토리에 접근할 때, 서버는 해당 디렉토리에 있는 "index" 파일을 자동으로 찾고 이를 표시함
vi /etc/httpd/conf/httpd.conf

DirectoryIndex index.html index.php



위에 처럼 index file 없을경우 특정 디렉터리 내 파일 및 디렉터리가 노출되고, 다운로드와 같은 작업도 가능한 상태이기 때문에 해당 웹 서버에 민감한 정보 등이 포함된 파일이 있을 경우 공격자에게 유출되는 문제가 발생할 수 있다.
index file은 각 directory마다 적용된다. 그렇다고 해서 모든 폴더마다 index file을 만들어 주기에는 힘들 거다.
vi /etc/httpd/conf/httpd.conf



<form action="proc/login_proc.php" method="GET"> <!-- GET 방식으로 데이터 전송 -->
<label for="name">Username</label>
<input type="text" name="name" required="">
<label for="password">Password</label>
<input type="password" name="passwd" required="">

GET method는 요청 URL의 쿼리 문자열을 통해 데이터를 전송하는 것을 볼 수 있다.
<form action="proc/login_proc.php" method="POST"> <!-- POST 방식으로 데이터 전송 -->
<label for="name">Username</label>
<input type="text" name="name" required="">
<label for="password">Password</label>
<input type="password" name="passwd" required="">

POST method는 URL의 쿼리 문자열을 통하지 않고 request body 부분에 파라미터를 넣어 보내는 것을 볼 수 있다. 이 데이터는 Content-Type 헤더에서 지정된 형식(application/x-www-form-urlencoded)에 따라 서버에 전송된다.
인터넷을 이용하면서 접속하게 되는 웹 페이지는 크게 두 가지로 나뉜다.
저장된 파일을 그대로 보는 정적 웹 페이지(Static Web Page)와 다른 변수들에 의해 변경되어 보이는 동적 웹 페이지(Dynamic Web Page)다.
변경 불가능: 콘텐츠가 고정되어 있어, 변경하려면 직접 HTML 파일을 수정해야 한다.
서버 자원 적음: 서버에서 요청이 들어오면 미리 저장된 HTML 파일을 그대로 보내기 때문에 서버 자원이 적게 사용된다.
빠른 로드 속도: 별도의 데이터베이스 조회나 서버 측 처리 없이 단순히 파일을 전달하기 때문에 빠르게 로드된다.
사용 사례: 회사 소개 페이지, 포트폴리오, 블로그의 정적인 페이지 등.
<html>
<head><title>About Us</title></head>
<body>
<h1>Welcome to Our Company</h1>
<p>We provide the best services in the industry.</p>
</body>
</html>
위 페이지는 항상 동일한 내용으로 제공된다.
실시간 콘텐츠 생성: 사용자 입력, 데이터베이스에서 조회된 정보, API 요청에 따라 실시간으로 콘텐츠가 생성된다.
유연성: 사용자마다 다른 내용을 보여줄 수 있으며, 콘텐츠 변경이 데이터베이스나 서버 측 로직을 통해 쉽게 이루어진다.
서버 자원 필요: 서버에서 사용자 요청을 처리하고, 데이터를 조회하거나 계산한 후 페이지를 생성하므로 서버 자원이 필요하다.
사용 사례: 로그인 페이지, 상품 목록 페이지, 검색 결과 페이지 등.
<html>
<head><title>Welcome</title></head>
<body>
<h1>Welcome, <?php echo $_SESSION['username']; ?></h1>
<p>Your account balance is: <?php echo $account_balance; ?></p>
</body>
</html>
위 페이지는 로그인한 사용자에 따라 각기 다른 username과 account_balance를 보여준다
WAS는 동적 웹 애플리케이션을 처리하기 위해 설계된 서버 소프트웨어 일반적인 정적 웹 서버와는 달리, 클라이언트의 요청에 따라 데이터를 처리하고, 이를 동적으로 생성된 웹 페이지로 응답한다. 이 과정에서 데이터베이스와의 연동, 사용자 입력 처리 등 복잡한 로직을 수행할 수 있다.
동적 웹 페이지 처리: 사용자가 웹 페이지를 요청할 때, WAS는 서버 측에서 필요한 데이터를 처리하고, 그에 맞는 동적 콘텐츠를 생성한다. 예를 들어, PHP, JSP, ASP.NET 같은 서버 측 언어로 작성된 웹 애플리케이션 코드를 실행한다.
비즈니스 로직 수행: 단순히 파일을 제공하는 것이 아니라, 데이터베이스 연동, 사용자 인증, 세션 관리와 같은 비즈니스 로직을 처리한다. 이는 클라이언트의 요청마다 다른 결과를 반환할 수 있게 한다.
웹 서버와의 차이점: 웹 서버(예: Apache, Nginx)는 주로 정적 파일(HTML, 이미지)을 제공하는 데 사용되며, WAS는 이러한 웹 서버와 협력하여 동적인 콘텐츠를 처리한다. 웹 서버가 정적 자원을 클라이언트에게 전달하는 동안, WAS는 동적 애플리케이션 로직을 처리하여 데이터베이스에서 정보를 가져오거나 서버 측에서 코드를 실행한 후 그 결과를 웹 서버를 통해 사용자에게 전달한다.
Apache Tomcat: 가장 많이 사용되는 WAS 중 하나로, Java Servlet과 JSP를 지원하는 서버이다.
JBoss (WildFly): Java EE 기반의 웹 애플리케이션 서버로, 대규모 엔터프라이즈 애플리케이션에 적합하다.
GlassFish: Oracle에서 개발한 Java EE 웹 애플리케이션 서버로, Java EE 표준을 준수한다.
WebLogic: Oracle에서 제공하는 상용 WAS로, 대규모 엔터프라이즈 시스템에 주로 사용된다.
Apache Web Server + PHP: PHP 기반 웹 애플리케이션 서버로, LAMP(Linux, Apache, MySQL, PHP) 환경에서 주로 사용된다.