웹 해킹 & 보안 완벽 가이드 - 3장 (웹 애플리케이션 기술)
HTTP 프로토콜
하이퍼텍스트 전송 프로토콜(HTTP) : 월드와이드웹(WWW)에서 쓰이는 핵심 통신 프로토콜
- 매시지 기반 모델 (클라이언트가 요청 메시지 전송 / 서버는 그에 대한 응답 메시지 보냄)
- 비연결지향적 프로토콜(요청과 응답에 대한 교환은 독립적으로 / 각기 다른 연결 사용)
+) TCP : 서버와 클라이언트 간에 데이터를 신뢰성 있게 전달하기 위해 만들어진 프로토콜
+) 프로토콜 또는 규약 : 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과 규칙의 체계
- 요청과 응답 : 헤더를 통해 다양한 정보 포함 / 헤더 밑에는 메시지 바디가 나옴
HTTP 요청
- HTTP 요청 첫 번째 줄에는 3가지 요소 존재
1. HTTP 전송 방법 : 일반적으로는 GET 메소드 사용(자료를 가져오는 기능)
2. 요청된 URL : URL(자료를 요청할 때 쓰는 이름)은 클라이언트가 자료를 요청하기 위해 보내는 인자 값 등 임의의 쿼리 문자열 / 쿼리 문자열로 ?를 사용
3. HTTP 버전 : 일반적으로 쓰이는 HTTP 버전은 1.0과 1.1
+) 추가적인 헤더
- Referer 헤더 : 해당 요청이 이전에 어디에서부터 요청을 받았는지에 대한 URL을 나타낸다.
- User-Agent 헤더 : 브라우저나 기타 클라이언트의 소프트웨어 정보를 보여준다.
- Host 헤더 : URL 주소에 나타난 호스트명을 자세하게 나타내기 위해 사용
- cookie 헤더 : 서버가 클라이언트에게 전송한 인자 값에 추가 정보를 보낼 때 사용
HTTP 응답
- HTTP 응답 첫 번째 줄에는 3가지 요소 존대
1. HTTP 버전
2. 요청에 대한 결과 코드 : 200이 가장 일반적인 코드 / 200이면 요청이 성공적으로 이루어짐
3. 응답에 대한 상황을 설명해 주는 문자열 : 정상적으로 페이지가 전달되면 OK라는 값을 보내줌
+) 추가적인 헤더
- Server 헤더 : 웹 서버 소프트웨어를 나타내는 배너가 들어있음.
- Set-Cookie 헤더 : 브라우저에게 쿠키에 대한 정보를 알려준다.
- Pragma 헤더 : 브라우저가 응답한 내용을 캐시에 저장하지 않게 함. + Expires 헤더도 마찬가지
+ 대부분의 HTTP 응답은 헤더 다음에 오는 빈칸 뒤에 메시지 바디가 따라 나온다.
- Content-Type 헤더 : 해당 메시지 바디에 HTML 문서가 있음을 알려줌.
- Content-Length 헤더 : 메시지 바디 길이를 바이트 단위로 나타냄.
HTTP 메소드
- 일반적으로 GET과 POST 메소드 사용
GET 메소드 : 웹 서버에 있는 자원을 얻을 때 사용
- 요청된 자원의 URL 쿼리 문자열에 인자 값을 보내는 용도로 사용
- 쿼리 문자열에는 중요한 정보가 들어있으면 안됨
POST 메소드 : 특정 행동을 시작할 때 사용
- 요청 인자를 URL 쿼리 문자열이 아닌 메시지의 바디에 보낼 수 있음.
- 메시지 바디로 전송된 다른 매개변수들은 브라우저 주소 창에 표시되지 않음.
- POST 요청은 특정 사용자의 액션이 실행될 때 항상 사용돼야 함.
+) 특정 목적이 필요한 경우 GET, POST 외에 다른 메소드 사용
HEAD 메소드
- GET 요청과 비슷하게 작동
- 서버가 클라이언트에 응답할 때 메시지 바디를 보내지 않음.
- GET 요청을 하기 전에 자료가 있는지 확인할 때 사용
TRACE 메소드
- 진단을 위한 목적으로 사용되는 메소드
- 서버는 응답 바디에 요청 받은 자료와 똑같은 내용을 보냄
- 클라이언트와 서버 사이에서 어떤 프록시 서버가 요청을 조정하는지 여부를 판단할 때 사용
OPTIONS 메소드
- 특정 자원에 맞는 HTTP 방식을 알려달라고 서버 측에 요청할 때 사용
- 이에 대한 응답으로 서버는 Allow 헤더에서 사용할 수 있는 모든 메소드 리스트를 클라이언트에 보냄
+) Allow 헤더 : 리소스가 지원하는 메소드 집합을 나열하는 헤더 / ex ) Allow : GET, POST, HEAD
PUT 메소드
- 특정 자원을 올릴 때 사용하는 방식
- HTTP 바디에 있는 내용을 올리게 요청
- 애플리케이션을 공격할 때 유용한 메소드로 사용
ex) 임의의 스크립트를 서버에 올려 실행 가능
URL
: 웹 자료 고유의 이름으로 자우너을 검색할 때 사용
- 형식 : 프로토콜://호스트명 [:포트번호] / [경로/] 파일명 [?param=값]
- 포트 번호는 기본 웹 포트 값인 80을 사용하기 때문에 따로 URL에 작성 X
- 다른 포트 번호 사용 시호스트 명 뒤에 입력
ex) http://test.com/search?make=ford&model=pinto (쿼리 문자열로 나타낸 URL)
REST
: 분산 시스템에서 사용하는 아키텍처의 한 종류
+) 아키텍처 : 시스템의 구조, 동작 등을 정의하는 개념적인 모형
- 요청과 응답 내용에 시스템 자원의 현재 상태가 나타나 있음.
- 월드와이드웹, HTTP 프로토콜, URL 형식 등에서 사용하는 핵심 기술과 REST 아키텍처가 비슷
ex) http://test.com/search/ford/pinto (REST 형식 매개변수로 나타낸 URL)
HTTP 헤더
- 일반적인 헤더
- 요청 헤더
- 응답 헤더
쿠키
: 웹 애플리케이션이 사용자를 구분할 때 사용되는 HTTP 프로토콜의 중요한 요소
- 공격자가 웹 애플리케이션의 취약점을 찾을 때 쿠키를 많이 사용함.
- 쿠키 메커니즘 : 서버가 클라이언트에게 데이터를 보낼 수 있게 함 / 클라이언트가 쿠키를 저장 → 다시 서버에게 보냄
- 특별한 행동 없이도 서버로 페이지를 요청할 때마다 쿠키 사용
- Set-Cookie 헤더를 통해 쿠키 생성 → 클라이언트에게 전송 (생성 시 다른 속성들을 추가적으로 포함 가능)
- 쿠키를 받은 사용자의 브라우저는 서버로 보내는 요청에 쿠키 헤더를 더함
- 쿠키는 일반적으로 이름과 값으로 구성
상태 코드
: HTTP 응답 메시지는 첫 번째 줄에 요청 결과를 나타내는 상태 코드 포함
- 첫 번째 숫자에 의해 다섯 가지로 구분.
- 1xx : 정보 제공
- 2xx : 요청이 성공적으로 이뤄짐
- 3xx : 요청한 해당 자원이 다른 곳에 있음
- 4xx : 요청(클라이언트)에 문제가 있음
- 5xx : 서버에 에러가 있음
HTTPS
: HTTP와 같이 애플리케이션 계층 프로토콜 SSL을 이용해 클라이언트와 서버 사이에 주고받는 정보 보호에 사용
- 데이터가 네트워크 장비를 통과할 때 암호화되지 않는 단순한 TCP를 사용 → 공격자가 네트워크에 잠입해 중간에 있는 정보 유출 O
- 네트워크를 통과하는 모든 데이터의 프라이버시와 손실을 보호 및 데이터의 유출을 예방하는 역할
HTTP 프록시
: 클라이언트 브라우저와 목적지 웹 서버 간에 중개 역할을 함.
- 캐싱, 인증, 접근 통제 같은 서비스 제공
- 프록시 서버 사용 시 HTTP는 2가지 방식으로 작동
1. 브라우저가 프록시 서버에게 HTTP 요청 시 완벽한 URL 주소 사용 → 프록시 서버는 URL에서 호스트명을 목적지 웹 서버를 찾는데 직접적으로 사용
2. 암호화되지 않은 HTTPS를 사용시 브라우저는 프록시 서버와 SSL 핸드쉐이크를 할 수 없게 됨. → 브라우저는 TCP 레벨의 릴레이로 프록시 서버를 사용
+) 핸드세이크 : 통신의 양측 간에 조건에 합의해 가는 정보 교환 과정
HTTP 인증
- HTTP 프로토콜은 사용자를 인증할 때 다양한 인증 방법 이용
ex) Basic, NTLM, Digest
인코딩 스키마
- URL 인코딩
- 유니코드 인코딩
- HTML 인코딩
- Base64 인코딩
- Hex 인코딩
'웹 해킹 & 보안 완벽 가이드' 카테고리의 다른 글
웹 해킹 & 보안 완벽 가이드 - 2장 (핵심 방어 메커니즘) (0) | 2023.05.11 |
---|---|
웹 해킹 & 보안 완벽 가이드 - 1장 (웹 애플리케이션 보안) (0) | 2023.05.10 |