[개발자되기: 웹인증/보안/쿠키/세션] Day-45

Kyoorim LEE·2022년 7월 14일
0

웹인증/ 보안

HTTPS 프로토콜

HTTP + Secure => HTTP프로토콜 내용을 암호화함으로서 보안성이 추가됨

인증서

  • 데이터 제공자 신원 보장
  • 인증서에 도메인 정보 들어가있음 (응답객체 도메인과 인증서 도메인이 같은지를 비교하여 확인)

CA

  • Certificate Authority
  • 공인 인증서 발급 기관
  • TLS or SSL: 서버와 클라이언트 간 CA를 통해 서버인증하는 과정과 데이터 암호화하는 과정을 아우른 프로토콜

비대칭 키 암호화

  • 다른 키 한쌍으로 암호화와 복호화가 가능
  • 공개키와 비밀키를 가지고 상대가 나의 공개키로 암호화한 데이터를 개인이 가진 비밀키로 복호화
    - 키 A로 암호화 && 키 B로만 복호화가 가능함

Hashing

어떤 문자열에 대한 '임의의 연산'을 적용하여 다른 문자열로 변환하는 것

Hashing 조건

  • 해시 값을 계산하는데 오래걸리지 않아야 함
  • 최대한 해시 값을 피해야하며 모든 값은 고유한 해시 값을 가짐
  • 아주 작은 단위의 변경이라도 완전히 다른 해시 값을 가져야 함

Salt

암호화해야 하는 값에 어떤 '별도의 값'을 추가하여 결과를 변형하는 것

  • 암호화만 해놓는 다면 해시된 결과가 늘 동일하기 때문
  • Salt와 함께라면 원본값에 임의로 약속된 '별도의 문자열'을 추가하여 해시를 진행하면, 기존 해시값과 전혀 다른 해시값이 반환되어 알고리즘이 노출 되더라도 원본값을 보호할 수 있게됨!
  • 기존: (암호화 하려는 값) => (hash 값)
  • With Salt : (암호화 하려는 값) + (Salt 용 값) => (hash 값)

Salt 사용시 유의점

  • Salt는 유저와 패스워드 별로 유일한 값을 가져야함
  • 사용자 계정을 생성할 때와 비번을 변경할 때 마다 새로운 임이의 Salt를 사용해서 해싱해야함
  • Salt는 절대 재사용 금지
  • Salt는 DB의 유저 테이블에 같이 저장되어야 함


쿠키 🍪

HTTP는 stateless(무상태성)임에도 우리의 정보가 유지되는 이유! ex) 장바구니 목록 유지
🍪 : 어떤 웹사이트에 들어갔을 때 서버가 일방적으로 클라이언트에 전달하는 작은 데이터

  • 서버가 웹 브라우저에 정보를 저장하고 불러올 수 있는 수단
  • 해당 도메인에 대해 쿠키가 존재하면, 웹브라우저는 도메인에게 http 요청 시 쿠키를 함께 전달함
  • 삭제하지 않는다면 사라지지 않음
  • 사용자 선호, 테마 등 장시간 보존해야하는 정보 저장에 적합

쿠키 옵션

  • Domain: 서버와 요청의 도메인이 일치하는 경우 쿠키 전송

  • Path: 서버와 요청의 세부경로가 일치하는 경우 쿠키 전송

  • MaxAge or Expires: 쿠키의 유효시간(초단위) 설정
    - ex) 피씨방 가서 로그아웃 안 한 경우 => 일정시간 후 자동 소멸
    - 세션 쿠키(Session Cookie): MaxAge or Expires 옵션이 없는 쿠키로 브라우저가 실행 중일 때 사용할 수 있는 임시 쿠키. 브라우저 종료하면 삭제됨
    - 영속성 쿠키(Persistent Cookie): 브라우저 종료여부와 상관없이 MaxAge or Expires에 지정된 유효시간만큼 사용가능한 쿠키

  • HttpOnly: 스크립트의 쿠키 접근 가능 여부 결정. 클라이언트에서 DOM을 이용해 쿠키접근하는 것을 막아주는 옵션
    - 해당 옵션이 true라면 js로 쿠키 접근 불가

    • 해당 옵션 false라면 document.cookie를 이용해 자바스크립트에서 쿠키접근 가능하므로 XSS 공격에 취약함
  • Secure: HTTPS 프로토콜에서만 쿠키 전송 여부 결정
    - Secure 옵션이 true로 설정된 경우 HTTPS 이용시에만 쿠키 전송 가능

    • Secure 옵션이 없다면 프로토콜 상관없이 전송 가능
  • SameSite: CORS 요청의 경우 옵션 및 메서드에 따라 쿠키 전송 여부 결정
    - 은행 사이트에 로그인된 상태라고 할때 CSFR 공격을 막는데 효과적

    • Lax : GET 메서드 요청에서만 쿠키 전송 가능
    • Strict : 쿠키 전송 불가
    • None : 모든 메서드 요청에 대해 쿠키 전송 가능
      - sameSite='none'을 사용하려면 반드시 Secure 쿠키 옵션이 필요함


Session

서버가 클라이언트에 유일하고 암호화된 ID 부여
중요 데이터는 서버에서 관리함

  • 코드스테이츠 자료

Session 단점

  1. 서버의 메모리 일정부분을 항상 차지하고 있으므로, 사용자가 많을 수록 가용 메모리 줄고 서버의 성능이 안좋아질 수 있음
  2. XSS 공격으로 세션 쿠키가 탈취될 경우 여전히 보안이 털릴 위험이 있음

실시간 세션

profile
oneThing

0개의 댓글