목차
옮긴이 머리말 ix
베타리더 후기 xi
머리말 xiii
감사의 말 xvi
1.1. CHAPTER 1 웹 보안의 개요 1
1.1 보안 대책이 필요한 이유 1
__1.1.1 취약성은 왜 발생할까? 1
__1.1.2 비기능 요건의 중요성 2
1.2 웹 취약성의 종류와 동향 3
__1.2.1 보안 지침에서 확인하는 취약성의 종류와 동향 4
__1.2.2 보안 관련 정보 수집 6
COLUMN 기업이 취약성에 대처하는 방법 6
마무리 7
1.2. CHAPTER 2 실습 준비 9
2.1 준비 전 9
__2.1.1 실습 추천 환경 9
__2.1.2 실습에서 사용하는 소프트웨어 9
2.2 Node.js 설정하기 11
__2.2.1 Node.js 설치하기 11
__2.2.2 Node.js 설치 확인하기 12
__2.2.3 npm 설치 확인하기 12
2.3 Node.js + Express를 사용한 HTTP 서버 구축하기 13
__2.3.1 실습 준비와 Express 설치하기 13
__2.3.2 Node.js + Express로 HTTP 서버 구축하기 14
__2.3.3 정적 파일 전달하기 17
__2.3.4 호스트명을 임의로 설정해 로컬 HTTP 서버에 접속하기 18
COLUMN CommonJS와 ECMAScript Modules 19
마무리 19
1.3. CHAPTER 3 HTTP 21
3.1 HTTP 기초 21
__3.1.1 URL 22
__3.1.2 DNS 23
__3.1.3 TCP/IP 24
__3.1.4 HTTP 메시지 26
__3.1.5 HTTP 메서드 28
__3.1.6 상태 코드 29
__3.1.7 HTTP 헤더 30
__3.1.8 쿠키를 사용한 상태 관리 32
3.2 HTTP 실습하기 33
__3.2.1 GET과 POST로 데이터 전송하기 33
__3.2.2 상태 코드 확인 및 변경하기 38
__3.2.3 임의로 HTTP 헤더 추가하기 42
3.3 안전한 통신을 위한 HTTPS 45
__3.3.1 HTTP의 약점 45
__3.3.2 HTTP 약점을 해결하는 TLS 47
__3.3.3 HTTPS 도입 권장 49
__3.3.4 안전한 콘텍스트만 이용 가능한 API 50
__3.3.5 Mixed Content의 위험성 51
__3.3.6 HSTS를 사용해 HTTPS 통신 강제하기 53
마무리 56
1.4. CHAPTER 4 Origin에 의한 애플리케이션 간 접근 제한 57
4.1 애플리케이션 간 접근 제한의 필요성 57
4.2 동일 출처 정책에 의한 보호 59
__4.2.1 출처 60
__4.2.2 동일 출처 정책 60
__4.2.3 동일 출처에 의해 접근 제한되지 않는 사례 65
4.3 동일 출처 정책에 따른 제한 실습 66
__4.3.1 교차 출처에 요청 전송 제한 확인하기 66
__4.3.2 iframe 내부 교차 출처 페이지에 접근 제한 확인하기 67
4.4 CORS 71
__4.4.1 CORS 방식 72
__4.4.2 단순 요청 73
__4.4.3 Preflight Request 74
__4.4.4 쿠키를 포함하는 요청 전송 80
__4.4.5 CORS 요청 모드 81
__4.4.6 crossorigin 속성을 사용하는 CORS 요청 82
4.5 CORS 실습 84
__4.5.1 교차 출처의 요청을 허가하는 방법 84
__4.5.2 접근 허가 출처를 제한하는 방법 87
4.6 postMessage를 사용해 iframe으로 데이터 전송하기 89
4.7 프로세스 분리에 따른 사이드 채널 공격 대책 91
__4.7.1 사이드 채널 공격을 방어하는 Site Isolation 91
__4.7.2 출처마다 프로세스를 분리하는 구조 93
__4.7.3 Cross-Origin Isolation이 유효한 페이지에서 SharedArrayBuffer 사용하기 95
마무리 96
1.5. CHAPTER 5 XSS 97
5.1 능동적 공격과 수동적 공격 97
__5.1.1 능동적 공격 97
__5.1.2 수동적 공격 98
5.2 XSS 99
__5.2.1 XSS 구조 100
__5.2.2 XSS 위협 101
__5.2.3 세 가지 XSS 102
__5.2.4 DOM 기반 XSS 104
__5.2.5 XSS 대책 109
5.3 XSS 방지 실습 121
__5.3.1 적절한 DOM API를 사용하는 방법 121
__5.3.2 URL 스키마를 http/https로 한정하기 125
__5.3.3 XSS 문제를 줄이는 DOMPurify 라이브러리 사용하기 127
5.4 Content Security Policy를 사용한 XSS 대처하기 129
__5.4.1 CSP 개요 129
__5.4.2 Strict CSP 134
__5.4.3 문자열을 안전한 타입으로 사용하는 Trusted Types 138
__5.4.4 Report-Only 모드를 사용한 policy 테스트 143
5.5 CSP 설정 실습하기 146
__5.5.1 nonce-source를 사용한 CSP 설정하기 146
__5.5.2 strict-dynamic을 사용해 동적으로
베타리더 후기 xi
머리말 xiii
감사의 말 xvi
1.1. CHAPTER 1 웹 보안의 개요 1
1.1 보안 대책이 필요한 이유 1
__1.1.1 취약성은 왜 발생할까? 1
__1.1.2 비기능 요건의 중요성 2
1.2 웹 취약성의 종류와 동향 3
__1.2.1 보안 지침에서 확인하는 취약성의 종류와 동향 4
__1.2.2 보안 관련 정보 수집 6
COLUMN 기업이 취약성에 대처하는 방법 6
마무리 7
1.2. CHAPTER 2 실습 준비 9
2.1 준비 전 9
__2.1.1 실습 추천 환경 9
__2.1.2 실습에서 사용하는 소프트웨어 9
2.2 Node.js 설정하기 11
__2.2.1 Node.js 설치하기 11
__2.2.2 Node.js 설치 확인하기 12
__2.2.3 npm 설치 확인하기 12
2.3 Node.js + Express를 사용한 HTTP 서버 구축하기 13
__2.3.1 실습 준비와 Express 설치하기 13
__2.3.2 Node.js + Express로 HTTP 서버 구축하기 14
__2.3.3 정적 파일 전달하기 17
__2.3.4 호스트명을 임의로 설정해 로컬 HTTP 서버에 접속하기 18
COLUMN CommonJS와 ECMAScript Modules 19
마무리 19
1.3. CHAPTER 3 HTTP 21
3.1 HTTP 기초 21
__3.1.1 URL 22
__3.1.2 DNS 23
__3.1.3 TCP/IP 24
__3.1.4 HTTP 메시지 26
__3.1.5 HTTP 메서드 28
__3.1.6 상태 코드 29
__3.1.7 HTTP 헤더 30
__3.1.8 쿠키를 사용한 상태 관리 32
3.2 HTTP 실습하기 33
__3.2.1 GET과 POST로 데이터 전송하기 33
__3.2.2 상태 코드 확인 및 변경하기 38
__3.2.3 임의로 HTTP 헤더 추가하기 42
3.3 안전한 통신을 위한 HTTPS 45
__3.3.1 HTTP의 약점 45
__3.3.2 HTTP 약점을 해결하는 TLS 47
__3.3.3 HTTPS 도입 권장 49
__3.3.4 안전한 콘텍스트만 이용 가능한 API 50
__3.3.5 Mixed Content의 위험성 51
__3.3.6 HSTS를 사용해 HTTPS 통신 강제하기 53
마무리 56
1.4. CHAPTER 4 Origin에 의한 애플리케이션 간 접근 제한 57
4.1 애플리케이션 간 접근 제한의 필요성 57
4.2 동일 출처 정책에 의한 보호 59
__4.2.1 출처 60
__4.2.2 동일 출처 정책 60
__4.2.3 동일 출처에 의해 접근 제한되지 않는 사례 65
4.3 동일 출처 정책에 따른 제한 실습 66
__4.3.1 교차 출처에 요청 전송 제한 확인하기 66
__4.3.2 iframe 내부 교차 출처 페이지에 접근 제한 확인하기 67
4.4 CORS 71
__4.4.1 CORS 방식 72
__4.4.2 단순 요청 73
__4.4.3 Preflight Request 74
__4.4.4 쿠키를 포함하는 요청 전송 80
__4.4.5 CORS 요청 모드 81
__4.4.6 crossorigin 속성을 사용하는 CORS 요청 82
4.5 CORS 실습 84
__4.5.1 교차 출처의 요청을 허가하는 방법 84
__4.5.2 접근 허가 출처를 제한하는 방법 87
4.6 postMessage를 사용해 iframe으로 데이터 전송하기 89
4.7 프로세스 분리에 따른 사이드 채널 공격 대책 91
__4.7.1 사이드 채널 공격을 방어하는 Site Isolation 91
__4.7.2 출처마다 프로세스를 분리하는 구조 93
__4.7.3 Cross-Origin Isolation이 유효한 페이지에서 SharedArrayBuffer 사용하기 95
마무리 96
1.5. CHAPTER 5 XSS 97
5.1 능동적 공격과 수동적 공격 97
__5.1.1 능동적 공격 97
__5.1.2 수동적 공격 98
5.2 XSS 99
__5.2.1 XSS 구조 100
__5.2.2 XSS 위협 101
__5.2.3 세 가지 XSS 102
__5.2.4 DOM 기반 XSS 104
__5.2.5 XSS 대책 109
5.3 XSS 방지 실습 121
__5.3.1 적절한 DOM API를 사용하는 방법 121
__5.3.2 URL 스키마를 http/https로 한정하기 125
__5.3.3 XSS 문제를 줄이는 DOMPurify 라이브러리 사용하기 127
5.4 Content Security Policy를 사용한 XSS 대처하기 129
__5.4.1 CSP 개요 129
__5.4.2 Strict CSP 134
__5.4.3 문자열을 안전한 타입으로 사용하는 Trusted Types 138
__5.4.4 Report-Only 모드를 사용한 policy 테스트 143
5.5 CSP 설정 실습하기 146
__5.5.1 nonce-source를 사용한 CSP 설정하기 146
__5.5.2 strict-dynamic을 사용해 동적으로