프런트엔드 개발을 위한 보안 입문

기초 보안 지식부터 XSS, CSRF 등 프런트엔드를 노리는 사이버 공격까지
$29.48
SKU
9791192987552
+ Wish
[Free shipping over $100]

Standard Shipping estimated by Mon 05/20 - Fri 05/24 (주문일로부 10-14 영업일)

Express Shipping estimated by Wed 05/15 - Fri 05/17 (주문일로부 7-9 영업일)

* 안내되는 배송 완료 예상일은 유통사/배송사의 상황에 따라 예고 없이 변동될 수 있습니다.
Publication Date 2024/01/02
Pages/Weight/Size 188*245*14mm
ISBN 9791192987552
Categories IT 모바일 > 네트워크/해킹/보안
Description
지금이라도 알아두면 쓸데 있는 취약성 관리 대책

프런트엔드 분야의 발전으로 다양한 기능과 UI를 개발할 수 있게 됐지만, 그만큼 프런트엔드와 관련된 보안 문제도 많아졌다. 이 책은 보안 관련 경험이 적은 프런트엔드 개발자를 대상으로 하며, 프런트엔드 보안 이슈, 취약성을 갖는 구조와 대책을 그림과 코드로 쉽게 이해할 수 있도록 구성했다. 보안 관련 경험이 있는 독자라면 실습을 통해 취약성 대책을 복습하고 최신 보안 정보도 얻을 수 있을 것이다. 보안 사고를 방지하고 취약성을 최소화하는 데 필요한 실무 지식을 빠르게 습득해보자.
Contents
옮긴이 머리말 ix
베타리더 후기 xi
머리말 xiii
감사의 말 xvi

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

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

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

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

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을 사용해 동적으로 〈script〉 요소 생성하기 150
__5.5.3 Trusted Types 설정 방법 153
마무리 155

CHAPTER 6 기타 수동적인 공격: CSRF, 클릭재킹, 오픈 리다이렉트 157

6.1 CSRF 157
__6.1.1 CSRF의 구조 157
__6.1.2 토큰을 사용하는 CSRF 대책 159
__6.1.3 Double Submit 쿠키를 사용하는 CSRF 대책 161
__6.1.4 SameSite 쿠키를 사용하는 CSRF 대책 163
__6.1.5 Origin 헤더를 사용하는 CSRF 대책 164
__6.1.6 CORS를 사용하는 CSRF 대책 165
6.2 CSRF 대책 실습 166
__6.2.1 간단한 확인용 로그인 화면 생성 166
__6.2.2 폼 전송 화면 생성하기 170
__6.2.3 피싱 사이트에서 CSRF 공격하기 173
__6.2.4 Double Submit 쿠키를 사용하는 CSRF 대책 174
6.3 클릭재킹 178
__6.3.1 클릭재킹의 구조 178
__6.3.2 클릭재킹 대책 181
6.4 클릭재킹 대책 실습 182
__6.4.1 클릭재킹 공격 재현하기 183
__6.4.2 X-Frame-Options에 의한 클릭재킹 대책 186
6.5 오픈 리다이렉트 187
__6.5.1 오픈 리다이렉트의 구조 187
__6.5.2 URL 검사를 통한 오픈 리다이렉트 대책 189
6.6 오픈 리다이렉트 대책 실습 190
__6.6.1 오픈 리다이렉트 공격 재현하기 190
__6.6.2 URL 검사에 의한 대책 191
마무리 192

CHAPTER 7 인증 · 인가 193

7.1 인증과 인가의 차이 193
__7.1.1 인증 193
__7.1.2 인증의 3요소 193
__7.1.3 인가 194
7.2 인증 기능의 보안 리스크 195
__7.2.1 인증 방식의 종류 195
__7.2.2 비밀번호 인증에 대한 공격 196
__7.2.3 비밀번호 인증 공격에 대한 대책 197
7.3 계정 생성 폼 구현 실습 198
__7.3.1 계정 생성 페이지 준비 198
__7.3.2 입력 내용에 따른 type 속성 변경 201
__7.3.3 입력 내용 유효성 검사 204
COLUMN 비밀번호 패턴 조합의 경우의 수 210
__7.3.4 비밀번호 입력 보조하기 211
7.4 로그인 정보 유출에 주의하기 217
마무리 219

CHAPTER 8 라이브러리를 노린 보안 리스크 221

8.1 라이브러리의 사용 221
__8.1.1 오픈소스 소프트웨어의 사용 221
__8.1.2 프런트엔드 라이브러리 상황 222
8.2 라이브러리에 숨어 있는 보안 리스크 223
__8.2.1 서드파티 라이브러리를 경유하는 공격 223
__8.2.2 리뷰가 충분하지 않은 코드에 의한 취약성 223
__8.2.3 계정 탈취에 의한 취약성 224
__8.2.4 의존 관계 상속에 의한 취약성 224
__8.2.5 CDN에서 콘텐츠 변조 225
__8.2.6 CDN에서 취약성을 갖는 버전의 라이브러리 가져오기 226
8.3 라이브러리 사용의 보안 대책 226
__8.3.1 취약성을 확인하는 툴과 서비스 사용 226
__8.3.2 유지보수가 꾸준히 이루어지는 라이브러리 사용하기 230
__8.3.3 최신 버전의 라이브러리 사용하기 230
__8.3.4 하위 자원 무결성을 통한 변조 확인하기 231
__8.3.5 CDN에서 불러오는 라이브러리의 버전 지정하기 232
마무리 233

APPENDIX A 앞에서 다루지 않은 주제 235
A.1 보안 관련 보충학습 235
__A.1.1 책에서 다루지 않은 주제 학습 236
__A.1.2 보안 관련 정보를 얻는 필자의 방법 237
A.2 HTTPS 실습 240
__A.2.1 HTTPS 서버 구현하기 240
__A.2.2 HSTS를 사용해 HTTPS로 통신 강제하기 246

APPENDIX B 한국어판 부록 251
B.1 보안 체크리스트 251

참고문헌 255
찾아보기 260
Author
히라노 마사시,이춘혁
Node.js Core Collaborator이자 Cybozu 주식회사의 프런트엔드 엔지니어. OSS(오픈소스 소프트웨어) 활동과 JSConf JP 등 다양한 커뮤니티 운영에 참여하고 있다. 웹과 자바스크립트를 좋아하고, 잡지에 글을 기고하거나 강연을 하기도 한다.
Node.js Core Collaborator이자 Cybozu 주식회사의 프런트엔드 엔지니어. OSS(오픈소스 소프트웨어) 활동과 JSConf JP 등 다양한 커뮤니티 운영에 참여하고 있다. 웹과 자바스크립트를 좋아하고, 잡지에 글을 기고하거나 강연을 하기도 한다.