
2장. 웹 보안 기본 지식
1. 웹의 기본 구조
(1) 클라이언트-서버 모델
(2) URL과 도메인 네임
1) URL
2) 도메인 네임
(3) HTTP
1) 이해
2) HTTP 메시지
① 헤더(Header)
② 바디(Body)
③ HTTP 메서드(HTTP Method)
④ 상태 코드(Status Code)
3) HTTP 쿠키와 보안
2. Origin과 CORS
(1) Origin과 SOP
1) Origin
2) SOP(동일 출처 정책)
(2) CORS
1) 이해
2) CORS 헤더
3) 작동 방식
① 단순 요청
② 사전 요청(Preflight 요청)
4) 실습
① CORS 에러 이해
② 클라이언트 측 CORS 설정
③ 쿠키를 포함하는 요청의 CORS 설정
④ Proxy 서버를 이용한 요청 우회
3장. 클라이언트 사이드 보안 위협 유형
1. XSS
(1) 이해
(2) XSS 공격의 종류
1) Stored XSS(저장형 XSS)
2) Reflected XSS(반사형 XSS)
3) DOM-based XSS(DOM 기반 XSS)
(3) XSS 발생 경우
1) 입력값에 대한 검증 부족
2) 출력값에 대한 인코딩 부족
(4) XSS 대책 방법
1) 입력값 검증
2) 출력값 인코딩
2. CSRF
(1) CSRF의 구조
1) 이해
2) 공격 시나리오 예시
3) XSS와 비교
(2) 대책 방법
1) CSRF 토큰(동기화 토큰) 패턴
2) Double Submit 쿠키 패턴
3) SameSite 쿠키 속성 사용
4) Origin 헤더 검사
3. 오픈 리디렉트
(1) 오픈 리디렉트의 구조
1) 이해
2) 공격 시나리오 예시
(2) 대책 방법
1) 화이트리스트(Whitelist) 사용
2) 정규표현식을 이용한 URL 패턴 검사
3) 간접 리디렉션
4) URL 구조 분석
5) 서버 측 식별자 사용
4. 클릭재킹
(1) 이해
(2) 클릭재킹 공격 시나리오
1) 사용자 인터페이스 조작
2) 웹 애플리케이션의 취약점
(3) 클릭재킹 대책
1) UI 디자인 및 인터페이스 요소 보호
2) JavaScript를 사용한 방어
4장. 인증ㆍ인가
1. 인증ㆍ인가
(1) 인증과 인가
1) 인증(Authentication)
2) 인가(Authorization)
(2) 인증과 인가의 중요성
2. 인증 상태 관리(브라우저 저장소)
(1) 브라우저 저장소 옵션(localStorage vs sessionStorage vs 쿠키)
1) localStorage
2) sessionStorage
3) 쿠키
(2) 각 저장소의 보안 위험 및 고려사항
1) localStorage와 sessionStorage의 보안 위험
2) 쿠키(Cookie)의 보안 위험 및 고려사항
3. 세션 기반 인증
(1) 이해
1) HTTP 기본 인증
2) 세션 기반 인증
(2) 프론트엔드의 세션 관리와 보안
1) 세션 ID 저장
① 쿠키에 저장
② localStorage와 sessionStorage
2) 세션 ID 전송
3) 세션 ID 삭제
(3) 실습
1) 세션 기반 인증시 고려 사항
2) 프론트엔드 예시 코드
4. OAuth 2.0
(1) 이해
1) OAuth
2) 인증 흐름
(2) 프론트엔드의 OAuth 2.0 구현과 보안
1) 리디렉트 보안
2) 그랜트 유형(Grant Types)
3) 토큰 저장과 갱신
① 접근 토큰(Access Token)
② 갱신 토큰(Refresh Token)
③ 토큰 만료 감지 및 자동 갱신
(3) 실습
1) OAuth 2.0 구현시 고려 사항
2) 프론트엔드 예시 코드
5. 토큰 기반 인증
(1) 이해
1) 토큰 기반 인증
2) 세션 기반 인증과의 비교
3) JWT(JSON Web Token)
(2) 프론트엔드의 토큰 관리와 보안
1) 토큰 저장과 갱신
2) 토큰 전송
3) 토큰 삭제
(3) 실습
1) 토큰 기반 인증 구현시 고려사항
2) 프론트엔드 예시 코드
5장. 클라이언트 사이드 입력 검증
- 이해
(1) 클라이언트 사이드 입력 검증이란?
(2) 중요성
- 입력 검증 취약점과 방지 방법
(1) XSS 방지
1) 취약점 코드 예시
2) 코드 개선
(2) CSRF 방지
1) 취약점 코드 예시
2) 코드 개선
① SSR의 경우(CSRF 토큰 방식을 통한 방어)
② CSR의 경우(토큰 기반 인증)
(3) 파일 업로드 검증
1) 취약점 코드 예시
2) 코드 개선
(4) 입력 데이터 길이 제한
1) 취약점 코드 예시
2) 코드 개선
(5) SQL 인젝션 방지
1) 취약점 코드 예시
6장. 보안 통신
- HTTPS
(1) 이해
(2) 이해 범위
(3) HTTPS 확인
- 데이터 암호화
(1) 이해
(2) 종류
1) 단방향 암호화
2) 양방향 암호화
(3) 실습