💭 오늘의 학습 전략
# HTTPS
◼️HTTP와 HTTPS
◼️인증서
◼️CA
◼️비대칭키 암호화
◻️ TSL & SSL
◻️ 실습: 인증서 발급 및 HTTPS 서버 구현
# Hashing
◾hashing
◾암호화 알고리즘
◽salting
# Cookie
◾Set-Cookie
◾쿠키 옵션
# Session
◾Cookie와 Session
# 웹 보안 공격
◾SQL Injection
◾CSRF
🌼 학습한 것들
◾인증과 인가
▪️ 인증 (Authentication)
- 사용자 신원 확인
▪️ 인가 (Authorization)
- 인증을 끝낸 사용자의 권한 확인
- 인증되었다고 해서 모두 인가되는 것은 아님
◾ HTTPS 특징
▪️ 인증서 (Certificate)
- 데이터 제공자 신원 보장
- 인증서 내 도메인 관련 정보 -> 인증 용이
- 1. 서버 -> 클라이언트 CA 발급 인증서 전달
- 2. 클라이언트: OS 또는 브라우저에 내장된 CA 리스트를 통해 인증된 CA의 인증서인지 확인
- 3-1. 인증된 CA의 인증서가 아니라면 경고창
- 3-2. 확인 되었다면 서버 인증서 복호화(CA 공개키)
▪️ CA (Certificate Authority)
- 인증서 보증해주는 제 3자 (인증서 발급 공인된 기관)
- 각 브라우저는 신뢰하는 CA 정보를 가지고 있다
▪️ 비대칭 키 암호화
◾ HTTPS 연결 과정
▪️ HTTPS는 대칭키, 비대칭키 방식을 모두 이용해 데이터를 암호화 한다
◾ TLS 또는 SSL (표준화 -> 이름 변경)
▪️ 서버-클라이언트 간 CA를 통해 서버를 인증하고 데이터를 암호화하는 과정을 아우른 프로토콜
◾ 자바가 지원하는 인증서 형식
▪️ PKCS12(Public Key Cryptographic Standards)
- mrcert(: 인증서 발급 프로그램) 지원 형식
▪️ JKS(Java KeyStore)
◾ Hashing
◾ Cookie 특징
▪️ 서버가 웹 브라우저에 정보를 저장하고 불러올 수 있도록 클라이언트에 일방적으로 전달하는 데이터
▪️ 해당 도메인에 쿠키가 존재하면 http 요청 시 자동으로 쿠키 전달
▪️ 삭제하지 않으면 사라지지 않는 성질 -> 로그인 상태 유지, 장바구니 등
▪️ 인증 정보는 암호화(해싱)된 내용으로 저장
◾ Cookie 전달 방법
◾ Cookie 옵션
▪️ 아무 때나 쿠키 정보를 가져올 수 없고, 특정 조건을 만족할 때.
▪️ Domain: 서버 도메인과 요청 도메인 일치해야
- ex) naver.com
▪️ Path: 요청 세부 경로가 일치해야
- ex) Path: /users, 요청: /users/info
▪️ MaxAge or Expires: 쿠키 유효기간. 앞으로 몇 초 or 언제까지(Date)
- 세션 쿠키: 옵션x 브라우저 실행 중에 사용하는 임시 쿠키, 종료하면 삭제
- 영속성 쿠키: 지정된 유효시간만큼 사용
▪️ Secure: true면 HTTPS 프로토콜에서만 전송 가능
▪️ SameSite:
- Lax: Cross-Origin 요청이면 GET만
- Strict: same-site만
- None: 항상(Secure 옵션 필요)
stateless -> stateful
◾ Session
▪️ 서버가 클라이언트에 유일하고 암호화된 ID를 부여, 중요 데이터는 서버에서 관리
▪️ 전달 방법
▪️ 로그아웃: 서버가 쿠키 임의 삭제 불가능. Set-Cookie로 무효한 값 갱신할 수 있다
- 서버: 세션 정보 삭제
- 클라이언트: 쿠키 갱신
▪️ 단점
- 서버 이용자가 많으면 가용 메모리가 줄어 성능 줄어듦
- XSS -> 탈취 위험 존재
◾ 웹 보안 공격
▪️ SQL Injection: 명령문 삽입으로 임의의 SQL문 실행
- ex) 'OR '1'='1을 넣으면 해당 쿼리가 무조건 실행될 수 있다
'; DROP TABLES users; --' 해버리면 테이블 삭제 당할 수 있다
- 대응 방안
1. 요청값 검증 (화이트 리스트)
2. Prepared Statement 구문 사용 (입력값을 단순 텍스트로 인식)
3. Error Message 노출 금지 (별도의 에러 핸들링 필요)
▪️ CSRF (Cross-Site Request Forgery: 다른 사이트/요청/조작)
- ex) 링크 누르면 계좌 출금
- 공격 조건
1. 쿠키를 사용한 로그인 (쿠키로 어떤 유저인 지 알 수 있을 때)
2. 예측 가능한 요청 파라미터 가져야 함. 비밀번호 입력 재요청 -> 몰라... 실패
- 대응 방안
1. CSRF 토큰 사용
2. Same-Site Cookie 사용하기
🔥 보충이 필요한 것들
◾ Same-Site와 Same-Origin
💨 하루를 마치며
1. 실습 신기했다. 근데 설치하는데 좀 헤매서 시간을 많이 썼다.ㅠ
2. 나만 내용이 많다고 생각한 걸까..../...???!!
3. 시큐리티 열심히 해보자...🥹
'공부기록 > TIL' 카테고리의 다른 글
2023/01/31 TIL | [Cloud] 운영 환경 구성 (0) | 2023.01.31 |
---|---|
2023/01/18 TIL | JWT 인증(Authentication) (0) | 2023.01.18 |
2023/01/10 TIL | 빌드/실행/배포 (0) | 2023.01.10 |
2023/01/06 TIL | API 문서화 (1) (0) | 2023.01.06 |
2023/01/05 TIL | Mockito, TDD (0) | 2023.01.05 |
댓글