1. HTTPS 개념을 이해하고, 권한 부여(Authorization)와 인증(Authentication)에 대해 이해할 수 있다.
2. hashing(해싱)에 대해 이해할 수 있다.
3. cookie(쿠키)를 이해하고 작동 원리를 설명할 수 있다.
4. session(세션)에 대해 이해할 수 있다.
5. 웹 보안 공격에 대해 이해할 수 있다.
- HTTPS
✔︎ HTTP : 인터넷에서 데이터를 주고 받을 수 있는 통신 프로토콜
✔︎ HTTPS
✔︎ HTTPS 특징
- Hashing
✔︎ 정보를 임의 방식을 사용해 다른 형태로 변환하여 해당 방식을 알고 있는 사람을 제외하고는 이해할 수 없도록 알고리즘을 통해 정보를 관리
✔︎ 어떤 문자열에 임의의 연산을 적용하여 다른 문자열로 변환하는 것
✔︎ 3가지 철칙
✔︎ 암호화해야 하는 값에 어떤 별도의 값을 추가하여 결과를 변형하는 것
✔︎ 암호화만 해놓는다면 결과가 늘 동일
✔︎ 원본 값에 Salt를 적용시키면, 기존 해시 값과 전혀 다른 해시 값이 반환되므로 알고리즘이 노출되더라도 원본값을 보호할 수 있는 안전장치 역할
✔︎ 기존 : 암호화하려는 값
→ hash 값
, Salt 사용 : 암호화하려는 값
+ Salt용 값
→ hash 값
✔︎ 주의점
- Cookie
✔︎ 어떤 웹사이트에 들어갔을 때, 서버가 일방적으로 클라이언트에 전달하는 작은 데이터
✔︎ HTTP의 stateless(무상태성)을 stateful하게 유지할 수 있게 도와줌
✔︎ 서버가 웹 브라우저(클라이언트)에 정보(데이터)를 저장하고 불러올 수 있는 수단
✔︎ 해당 도메인에 대해 쿠키가 존재하면, 웹 브라우저는 도메인에게 http 요청 시 쿠키를 함께 전달
✔︎ 사용자 선호, 테마 등 장시간 보존해야하는 정보 저장에 적합
✔︎ 쿠키 옵션
※ 세션 쿠키 : MaxAge
또는 Expires
옵션이 없는 쿠키, 브라우저 실행 중일 때 사용하는 임시 쿠키, 브라우저 종료 시 해당 쿠키 삭제
※ 영속성 쿠키 : 브라우저 종료 여부와 상관없이 MaxAge
또는 Expires
에 지정된 유효시간만큼 사용 가능한 쿠키
true
인 경우, 자바스크립트에서 쿠키에 접근 ❌false
(기본값)인 경우, 자바스크립트에서 쿠키에 접근 ⭕️, XSS 공격에 취약 👿true
인 경우, HTTPS 프로토콜을 이용하여 통신하는 경우에만 쿠키 전송 가능GET
메서드에 대해서만 쿠키 전송 가능same-site
인 경우에만 쿠키 전송 가능Secure
쿠키 옵션 반드시 필요❗️✔︎ 기본적으로 쿠키는 오랜 시간 유지될 수 있고, 자바스크립트를 이용하여 쿠키에 접근 가능 → 쿠키에 민감한 정보 담는 것은 위험 ⛔️
- Session
✔︎ 서버가 클라이언트에 유일하고 암호화된 ID 부여
✔︎ 중요 데이터는 서버에서 관리
- 웹 보안 공격
✔︎ 데이터베이스에서 임의의 SQL문을 실행할 수 있도록 명령어를 삽입하는 공격 유형
✔︎ 응용 프로그램의 보안상 허점을 이용해 데이터베이스를 비정상적으로 조작, 이를 통해 기록 삭제 또는 데이터 유출 가능
✔︎ 대응 방안
✔︎ 주소가 다른 사이트에서 요청 조작
✔︎ 다른 사이트(cross-site)에서 유저가 보내는 요청(request)을 조작(forgery)하는 것
✔︎ 해커가 직접 데이터에 접근 ❌
✔︎ CSRF 공격을 위한 조건
✔︎ 공격 방법
GET
요청으로 공격POST
요청으로 공격✔︎ 대응 방안
☞ Section 4, 보안의 첫 날이다. 첫 날이니만큼 인증 및 보안의 기초를 학습했다. 앞서 배운 HTTP 프로토콜에 보안성을 덧붙인 HTTPS 프로토콜에 대해 알아보았고, mkcert
프로그램을 이용해서 PKCS12
형식의 인증서를 만드는 실습도 진행해보았다.
그 동안 프로젝트를 만들면서 기능적인 구현에만 신경을 썼는데, 보안을 어떻게 적용할 지 해싱, 솔트 등의 방법을 알게 되었고, 많이 들어봤지만 확실히 알고 있지 않았던 쿠키와 세션에 대해 차이점을 생각하며 학습했다. 마지막으로 정보처리기사를 공부하며 접해봤던 SQL Injection, CSRF와 같은 웹 보안 공격 방법에 대해 알아보았다.
Section3를 진행하면서, 개념 위주의 학습보다는 실습 위주의 학습을 진행하게 되었었는데, 다시 Section4를 들어오면서 개념 위주의 학습 방법으로 바뀌게 되면서 적응하는 데에 시간이 걸렸다 😅 얼른 Spring Security에 대해 마스터해서 내가 만든 프로젝트에 어떻게 적용시킬 수 있을지 학습해보고 싶다!
・ Spring Security