1. 웹
- HTTP를 이용해서 정보를 공유하는 서비스를 웹이라고 한다. 정보 제공 주체는 웹 서버, 정보를 받는 이용자를 웹 클라이언트이다.
- 웹 서비스의 구조에서 이용자의 요청을 받는 부분을 프론트엔드, 요청을 처리하는 부분을 백엔드라고 부름
- 프론트엔드는 웹 리소스로 이루어져 HTML, CSS, JS 등으로 이루어진다.
2. HTTP/HTTPS
2-1 HTTP
- HTTP란 서버와 클라이언트의 데이터 교환을 요청과 응답 형식으로 정의한 프로토콜이다.
- 웹 서버는 HTTP 서버를 HTTP 서비스 포트에 대기시킨다. 이 포트는 일반적으로 TCP/80 또는 TCP/8080이다.
- 네트워크 포트와 서비스 포트
- 네트워크 포트 중 특정 서비스가 점유하고 있는 포트를 서비스 포트라고 하며 각 서비스는 전송 계층의 정해진 프로토콜을 따라 통신한다.
- 1~1023번까지는 잘 알려진(Well-Known port)로 각 포트 번호에 유명한 서비스가 등록되어있습니다. 포트는 65536개의 수를 가진다.
HTTP 메세지
- 바디: 헤더 뒤 모든 줄로 정보가 담김.
- 헤더: 각 줄은 CRLF로 구분되며 필드/값으로 메세지나 바디의 속성을 나타냄.
HTTP 요청
- 시작 줄은 Method, 요청 URL. HTTP 버전으로 구성됨
- Method: 대표적인 메소드는 GET과 POST가 있는데 GET은 리소스를 가져오라는 메소드로 서버에 요청을 해 리소스를 받아 새로운 페이지를 랜더링합니다. 반대로, POST는 리소스로 데이터를 보내라는 메소드로 전송할 데이터는 보통 HTTP 바디에 포함된다.
- 헤더와 바디
HTTP 응답
- 시작 줄: HTTP 버전, 상태 코드, 처리 사유로 구성됨
- 상태코드
상태 코드 설명 대표 예시
1xx | 요청을 제대로 받았고, 처리가 진행 중임 | |
2xx | 요청이 제대로 처리됨 | • 200: 성공 |
3xx | 요청을 처리하려면, 클라이언트가 추가 동작을 취해야 함. | • 302: 다른 URL로 갈 것 |
4xx | 클라이언트가 잘못된 요청을 보내어 처리에 실패했습니다. | • 400: 요청이 문법에 맞지 않음 |
• 403: 클라이언트가 리소스에 요청할 권한이 없음 | ||
• 404: 리소스가 없음 | ||
5xx | 클라이언트의 요청은 유효하지만, 서버에 에러가 발생하여 처리에 실패했습니다. | • 500: 요청을 처리하다가 에러가 발생함 |
• 503: 서버가 과부하로 인해 요청을 처리할 수 없음 |
- 헤더와 바디
2-2 HTTPS
- HTTP 전송과 응답이 평문으로 전송되는 반면 HTTPS(HTTP over Secure socket layer)는 TLS 프로토콜을 사용해 HTTP 메세지를 암호화한다.
3. 웹 브라우저
- 웹 브라우저의 동작 원리
- 웹 브라우저의 주소창에 입력된 주소(dreamhack.io)를 해석 (URL 분석)
- dreamhack.io에 해당하는 주소 탐색 (DNS 요청)
- HTTP를 통해 dreamhack.io에 요청
- dreamhack.io의 HTTP 응답 수신
- 리소스 다운로드 및 웹 렌더링 (HTML, CSS, Javascript)
URL요소 설명
-
Scheme 웹 서버와 어떤 프로토콜로 통신할지 나타냅니다. Host Authority의 일부로, 접속할 웹 서버의 주소에 대한 정보를 가지고 있습니다. Port Authority의 일부로, 접속할 웹 서버의 포트에 대한 정보를 가지고 있습니다. Path 접근할 웹 서버의 리소스 경로로 '/'로 구분됩니다. Query 웹 서버에 전달하는 파라미터이며 URL에서 '?' 뒤에 위치합니다. Fragment 메인 리소스에 존재하는 서브 리소스를 접근할 때 이를 식별하기 위한 정보를 담고 있습니다. '#' 문자 뒤에 위치합니다. - URL은 Uniform Resource Locator의 약자로 웹에 있는 리소스의 위치를 표시하는 문자열이다. URL은 Scheme, Authority (Userinfo, Host, Port), Path, Query, Fragment 등으로 구성된다. 더 자세한 설명은 공식 문서를 참고한다.
Domain Name
- URL의 구성 요소 중 Host는 웹 브라우저가 접속할 웹 서버의 주소를 나타낸다. Domain Name과 IP Address의 값으로 나타낼 수 있으며 일반적으로는 도메인의 특성을 담은 이름을 정의해 IP 대신 사용한다. 이를 사용할 떄 Domain Name Server(DNS)에서 도메인 이름을 IP 주소와 매칭시켜 찾은 후 실질적으로 IP와 통신을 수행한다.
웹 랜더링
- 웹 랜더링은 랜더링 엔진에 의해서 이루어지는데 브라우저별로 엔진이 다르다. 사파리는 웹킷, 크롬은 블링크, 파이어폭스는 개코 엔진을 사용한다.
- 웹 랜더링은 서버부터 받은 리소스를 이용자에게 시각화하는 것이다. 브라우저는 서버의 응답에 HTML을 파싱하고 CSS를 적용해 이용자에게 보인다.
개발자 도구
Elements: 페이지를 구성하는 HTML 검사. 코드를 선택하고 단축기 F2를 누르거나 더블클릭하면 이를 수정 가능.
Console(Control+Shift+J): 자바 스크립트를 실행하고 결과를 확인할 수 있음
Sources: HTML, CSS, JS 등 페이지를 구성하는 리소스를 확인하고 디버깅할 수 있음
🔴현재 페이지의 리소스 파일 트리, 파일 시스템
🟠선택한 리소스 상세 보기
🟢디버깅 정보
- Watch: 원하는 자바스크립트 식을 입력하면, 코드 실행 과정에서 해당 식의 값 변화를 확인할 수 있습니다.
- Call Stack: 함수들의 호출 순서를 스택 형태로 보여줍니다. 예를 들어, A → B → C 순서로 함수가 호출되어 현재 C 내부의 코드를 실행하고 있다면, Call Stack의 가장 위에는 C, 가장 아래에는 A가 위치합니다.
- Scope: 정의된 모든 변수들의 값을 확인할 수 있습니다.
- Breakpoints: 브레이크포인트들을 확인하고, 각각을 활성화 또는 비활성화할 수 있습니다.
Network: 서버와 오가는 데이터를 확인할 수 있음
- Preserve log: 새로운 페이지로 이동해도 로그를 삭제하지 않습니다.
- Disable cache: 이미 캐시된 리소스도 서버에 요청합니다.
- Copy as fetch로 HTTP Request를 복사하고 Console 패널에 붙여서 실행하면, 동일한 요청을 서버에 재전송할 수 있습니다.
Application: 쿠키를 포함하여 웹 어플리케이션과 관련된 데이터를 확인할 수 있음
-
- 페이지 소스보기(Ctrl+U)
- 시크릿모드(Ctrl+Shift+N): 방문 기록, 쿠키 및 사이트 데이터, 양식 입력 정보, 웹사이트에 부여된 권한이 저장되지 않음.
'Web hacking > 개념 정리 & 심화' 카테고리의 다른 글
[Dreamhack] W - STAGE 4 Cross-Site-Scripting(XSS) (0) | 2023.05.04 |
---|---|
[Dreamhack] W - STAGE 3 Cookie & Session (0) | 2023.05.04 |
4) SQL injection 및 XSS 보안 대책 상세 (0) | 2023.01.17 |
3) 게시판 개발 및 SQLi, XSS 취약점 테스트 (0) | 2023.01.16 |
웹 서비스의 구조 (0) | 2023.01.13 |