AnbyMata의 해킹 노트

[THM] Web Application Basics - EP.4 (Task 9~11). 完 본문

TryHackMe/Web & Networks 기초

[THM] Web Application Basics - EP.4 (Task 9~11). 完

AnbyMata 2026. 1. 23. 22:00

TryHackMe - "Web Application Basics". Task 9~11. Write-up + Extra Study!

출처: https://tryhackme.com/room/webapplicationbasics

 

Web Application Basics

Learn the basics of web applications: HTTP, URLs, request methods, response codes, and headers.

tryhackme.com

 

[9]  Security Headers

Security Headers = Web Application의 전반적인 보안 레벨을 올릴수 있는 HTTP의 Header들

 

4가지의 Security Header들을 다룹니다.

- 1. Content-Security-Policy (CSP)

- 2. Strict-Transport-Security (HSTS)

- 3. X-Content-Type-Options

- 4. Referrer-Policy

 

"https://securityheaders.com/" 사이트를 통해서 모든 웹 사이트의 Security Header들을 찾아볼 수 있습니다.

 

 

[9-1] Content-Security-Policy (CSP)

- CSP = Cross-Site Scripting (XSS)와 같은 공격을 방지하기 위한 추가적인 보안 계층 (Security Layer)

- 관리자가 안전하다고 판단한 domain(도메인) / resource(리소스)만을 명시

- 이를 통해 웹 페이지에서 허용되는 컨텐츠의 출처를 제한 → 출처가 불분명하거나 허용되지 않은 컨텐츠 차단

- CSP Header 예시

CSP Header 예시

대표적인 CSP Directive(지시자)

 

1. default-src

 - 기본 리소스 로딩 규칙을 정의함

 - 'self'현재 웹 사이트 (자신의 도메인)에서만 리소스를 불러올 수 있도록 제한

 - default-src 'self' = 스크립트·스타일·이미지 등 모든 리소스가 해당 웹사이트 출처에서만 허용되고, 외부 도메인에서 제공되는 리소스는 차단됨

 - 'self' 뒤에 특정 도메인 주소 추가 → 그 도메인에서 제공되는 리소스도 예외적으로 허용됨

 

2. script-src

 - 어디서 JavaScript 같은 스크립트를 로드할지 지정함

 - 'self' 는 현재 웹 사이트(자신의 도메인)에서 제공하는 스크립트만 허용함

 - script-src 'self' = 해당 웹사이트 JavaScript 스트립트만 허용되고, 외부 도메인에서 제공되는 스크립트는 차단됨

 - 'self' 뒤에 특정 도메인 주소를 추가 → 현재 사이트 외에 추가 도메인에서의 스크립트 허용됨

 

3. style-src

 - CSS 스타일 시트를 어디에서 로드할지 지정함

 - 'self' 는 현재 웹 사이트(자신의 도메인)에서 제공하는 CSS 스타일 시트만 허용함

 - style-src 'self' = 해당 웹사이트의 CSS 파일만 허용되고, 외부 도메인에서 제공되는 CSS 파일은 차단됨

 - 'self' 뒤에 특정 도메인 주소를 추가그 도메인에서 제공하는 CSS 파일은 허용됨

[보충 설명]
Directive, 지시자는 어떤 종류의 리소스를 어디에서 가져올 수 있는지를 브라우저이게 지시하는 규칙입니다.
CSP Directivedefault-src, sciprt-src, style-src 모두 'self' 를 통해 현재 웹사이트에서 제공하는 리소스만을 허용하도록 합니다.
그리고 'self' 뒤에 도메인 주소를 추가하면, 그 도메인 주소의 리소스들도 허용됩니다.
default-src 'self' http://anbymata.com; 이면, 현재 웹사이트와 "http://anbymata.com" 의 리소스들도 허용되는 방식입니다. 

각 지시자는 서로 다른 리소스 종류를 담당합니다.
default-src = 개별 지시자가 지정되지 않은 모든 리소스
script-src = JavaScript 같은 스크립트만
style-src = CSS 스타일 시트만
담당합니다.
즉, script-srcstyle-src가 별도로 지정되지 않은 경우, 스크립트와 스타일 시트는 default-src에 정의된 정책을 따릅니다.

 

 

 

[9-2] Strict-Transport-Security (HSTS)

- HSTS = 웹 브라우저가 해당 사이트에 접속할 때, 항상 HTTPS를 통해 연결하도록 강제하는 보안 정책

- HTTPS는 HTTP보다 보안성이 강함 → HTTPS 사용을 강제 → 전체적인 보안 수준 향상

- HSTS Header 예시

HSTS Header 예시

대표적인 HSTS Directive(지시자)

 

1. max-age

 - 해당 설정이 만료되는 시간

 - 단위는 초 (second)

 - 여기서 설정은 서버가 브라우저로 전송하는 HSTS 정책을 의미

 

2. includeSubDomains

 - 웹 브라우저가 해당 HSTS 정책을 모든 하위 도메인까지 적용하도록 지시

 

3. preload

 - 웹 사이트를 HSTS preload 목록에 등록할 수 있게 해주는 옵션

 - preload는 웹 페이지가 로드 되기 전에 특정 리소스를 미리 가져와 브라우저가 더 빠르게 랜더링 할 수 있게 도와줌

 

 

 

[9-3] X-Content-Type-Options

- X-Content-Type-Options = 무조건 Content-Type Header에 저장된 값만을 사용하도록 강제

- 브라우저가 일반적으로 가진 MIME 스니핑 (sniffing) 기능을 비활성화

- MIME sniffing: Content-Type이 없거나 잘못 설정될 시 파일 형식을 자동으로 추측하는 기능

- MIME: 파일아니 데이터의 형식 및 타입을 나타내는 표준 규격

- MIME sniffing으로 인한 자동 추측 과정에서 잘못된 해석이 발생해 취약점이 생길 수 있음

X-Content-Type-Options Header  MIME 스니핑을 차단

- X-Content-Type-Options 예시

X-Content-Type-Options Header 예시

 

- nosniff : 브라우저가 MIME 타입을 추측하지 못하게 하는 명령어

 

 

 

[9-4] Referrer-Policy

- Referrer-Policy = 사용자가 다른 사이트로 이동할 때, 웹 서버로 referrer 정보를 얼마나 어떤 범위까지 전달할지를 결정함

- referrer 정보이전 페이지의 URL을 뜻함 (= 현재 방문한 웹 페이지에 오기 직전 방문한 웹 페이지의 URL 정보)

- 보통 하이퍼링크, redirection(리디렉션), 리소스 요청 시에 전송할 referrer 정보의 포함 여부와 범위를 결정함

- Referrer-Policy 예시

Referrer-Policy Header 에시

대표적인 Referrer-Policy Directive(지시자)

 

1. no-referrer

 - 현재 웹사이트에 대한 모든 정보가 비활성화

 - 즉, 어떤 정보도 이동할 웹 서버에 보내지 않음

 

2. same-origin

 - 이동하려는 웹 서버의 도메인이 같을 경우, referrer 정보 (이전 페이지의 URL)를 전달함

 - 외부 사이트로 이동할 경우에는 referrer 정보를 전달하지 않음

 - 즉, 현재 웹사이트와 이동하려는 곳이 같을 때만, referrer 정보를 전달

 

3. strict-origin

 - protocol (프로토콜)이 동일하게 유지될때만, referrer 정보 (이전 페이지의 URL)를 전달함

 - HTTPS 에서 HTTPS 로 이동한다면, protocol (프로토콜)이 동일하게 유지된 것

 

4. strict-origin-when-cross-origin

 - 같은 사이트 내에서는 전체 URL 정보를 전송함

 - 다른 사이트로 이동할 때에는 도메인 정보만을 전송합니다.

 

 


[10]  Practical Task: Making HTTP Requests

0. 기본 정보

- 서버에 "tryhackme.com" 웹 사이트를 요청하고 있습니다.

- 1) 좌측 상단의 'GET' 부분을 클릭해 원하는 메서드로 변경 (GET, POST DELETE 등..)

- 2) "http://tryhackme.com/" URL 뒤에 이동하고자 하는 페이지 입력

  + "/example" 페이지로 이동한다고 하면, "http://tryhackme.com/example"로 URL 완성

- 3) 톱니바퀴 아이콘을 눌러 원하는 파라미터(parameter) 입력 (필요하다면)

  + 'key : value' 쌍으로 구성됨. [6-1]에서의 "user=anby"를 생각해보면 됨 (user : anby)

- 4) GO 버튼을 눌러 Request 전송

 

아래 내용을 보기 전, TryHackMe 사이트에서 실습해보세요! 

 

 

1. '/api/users' 페이지에 GET Request 보내기

 - GET = 웹 서버로부터 정보를 가져오는 method(메서드)

 - 즉, '/api/users' 페이지에 대한 정보를 가져옴

GET api/users HTTP/1.1

 

 

 

2. Bob의 country를 UK에서 US로 수정하도록 '/api/user/2' 페이지에 POST Request 보내기

 - 먼저 country 패러미터 값을 'US'로 설정

country : US

 

 - 'api/user/2' 페이지에 "country:US"을 포함한 POST Request 보내기

 - 즉, 'api/user/2' 페이지의 country값을 "US"로 변경

POST api/user/2 HTTP/1.1 + country=US

 

 

 

3. '/api/user/1' 페이지에 DELETE Request 보내기

 - DELETE = 웹 서버의 정보나 레코드를 삭제하는 method(메서드)

 - 즉, '/api/user/1' 페이지를 삭제

DELETE api/user/1 HTTP/1.1

 

 


[11]  Conclusion

학습한 내용들

- Web Application의 구성요소

- URL의 구조

- HTTP 메시지인 Request (요청)과 Response (응답)

- 다양한 보안 Header들

 

한 줄 정리

= Web Application = URL 구조 + HTTP Request/Response + Security Header 로 안전하게 동작합니다.

 

 


[TryHackMe] Web Application Basics - EP.4 (Task 9~11). END.

 

[TryHackMe] Web Application Basics. Finish!