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

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

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

히라노 마사시

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

목차

옮긴이 머리말 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 취약성을 확

출판사 서평

빈틈없는프런트엔드개발자로만들어주는실용적인보안책

프런트엔드를노리는사이버공격이늘어나면서,파이낸셜IT에서는2019년전체사이버공격의40%가XSS공격이라고밝혔다.해커원에따르면XSS취약점은버그현상금프로그램에서가장일반적인취약점유형이다.프런트엔드를제대로구현한다면이러한XSS공격뿐만아니라여러사이버공격을막을수있다.이책을통해취약성을조사하고,근본원인을이해하고,자신의애플리케이션을사이버공격으로부터보호해보자.책의1장에서는보안의필요성과최근트렌드를설명하고,2장에서는실습을위한개발환경과HTTP서버를구축한다.3장에서는HTTP기본지식과HTTPS의구조,필요성등을살펴보고,4장에서는웹보안의기본개념인동일출처정책과교차출처리소스공유를알아본다.5장에서는XSS,6장에서는CSRF,클릭재킹,오픈리다이렉트를설명한다.

7장에서는로그인기능을중심으로인증,인가에대해알아본다.8장에서는자바스크립트라이브러리를사용할때발생하는리스크와이를감소시키는방법을설명한다.책을읽고난뒤의학습방법과웹애플리케이션을HTTPS로사용할수있는구조를알아본다.또한한국어판부록으로웹애플리케이션을만들때참고할수있는보안체크리스트를제공한다.저자는통신기술이나암호기술등기초원리나기술스펙등의설명은과감히생략하고실무에서사용하는지식과실습위주로설명한다.프런트엔드개발실무에서자신이안전하게개발하고있는지점검할수있는보안입문서로,취약성대책을알아보고최신보안정보도얻을수있어웹보안을알아보고싶은프런트엔드개발자에게좋은지침서가될것이다.

주요내용

-보안의필요성과최신보안트렌드
-HTTP기본지식과HTTPS의구조및필요성
-동일출처정책과교차출처리소스공유
-XSS,CSRF,클릭재킹,오픈리다이렉트
-로그인기능중심으로인증및인가알아보기
-라이브러리사용시보안리스크줄이는방법