[section 4] 인증/보안 - 기초

수경·2023년 1월 17일
0

코드스테이츠

목록 보기
48/57
post-thumbnail

HTTPS

Hyper Text Transfer Protocol Secure ocket layer

= HTTP over SSL(TLS)
= HTTP over Secure

HTTP 통신 시 SSL or TLS 알고리즘을 이용해 테이터를 암호화하여 전송하는 방법

목적

  1. 암호화
    : 제 3자가 서버와 클라이언트가 주고받는 데이터를 탈취하더라도 알아볼 수 없도록 함
    ➡️ 비대칭키 + 대칭키 혼용하여 암호화
  1. 인증서
    : 브라우저가 서버의 응답과 함께 전달된 인증서를 확인하여 서버의 신원을 보증받을 수 있음
    ➡️ 발급기관 : CA(Certificate Authority)

Hashing

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

조건

  1. 변환하는 시간이 오래걸리지 않아야 함

  2. 모든 값은 고유한 해시값을 가짐

  3. 작은 단위의 변경이더라도 완전히 다른 해시값을 가져야 함

Salt

암호화할 값에 별도의 값을 추가하여 결과를 변형하는 것
hashing(평서문 + salt) ➡️ 암호문

암호화 알고리즘만으로 암호화
➡️ 알고리즘 유추 가능😮
➡️ 별도의 문자열을 추가하면 알고리즘이 노출되더라도 원본 값을 보호할 수 있음❗️

조건

  1. 유저와 패스워드별 고유한 값을 가져야 함 ➡️ 계정/패스워드 생성 때마다 새로운 임의의 salt로 해싱

  2. salt 재사용 금지

  3. salt는 DB의 유저 테이블에 함께 저장


클라이언트에 저장되는 작은 데이터 파일
이름, 값, 만료 날짜/시간(쿠키 저장기간), 경로 정보 등을 포함

서버에서 옵션 지정 후 set-Cookie 프로퍼티에 쿠키를 담아 전송

특징

  1. 쿠키를 이용한 상태 유지
    http의 stateless를 stateful하게 연결 가능
    ❗️but 쿠키에 민감한 정보 담지 않도록 주의

  2. 서버에서 클라이언트에 데이터를 저장할 수 있음
    데이터 저장, 가져오기 가능 ➡️ 아무때나 x 특정 조건(옵션)을 만족해야 가능

쿠키 옵션

  1. Domain : 도메인이 일치해야 함
    ex) naver.com에서 받은 쿠키를 google.com으로 전송할 수 없엄

  2. Path : 세부 경로 -> 설정된 path를 만족해야 함

  3. MaxAge or Expires : 쿠키의 유효시간

  • 세션 쿠키 : MaxAge/Expires 옵션이 없는 쿠키
    ➡️ 브라우저가 실행중일 때 사용, 종료시 삭제
  • 영속성 쿠키 : 브라우저의 종료와 무관하게 지정한 유효기간만큼 유지
  1. Secure : 쿠키 전송 프로토콜에 따른 쿠키 전송 여부 결정
  • True : Https 프로토콜만
  • 옵션이 없는 경우 : Http / Https 상관없이 전송 가능
  1. HttpOnly : 자바스크립트에서 브라우저의 쿠키 접근 여부 결정
  • True : 자바스크립트 접근 불가
  • 옵션이 없는 경우 : 기본값 false ➡️ XSS 공격에 취약
  1. SameSite : 요청을 보낸 origin과 서버의 도메인, 프로토콜, 포트가 같은 경우
    (하나라도 다르면 Cross-Origin)
  • Lax : Cross-Origin 요청이면 GET에 대해 쿠키 전송 가능
  • Strict : Cross-Origin이 아닌 SameSite인 경우에만 쿠키 전송 가능
  • None : 항상 쿠키 전송 가능

Session

사용자가 인증에 성공한 상태, 하나의 서버에만 접속 상태를 저장

session-id로 구분 : 클라이언트가 인증을 증명하는 수단

웹 사이트에서 로그인을 유지하는 수단 : 쿠키 (세션아이디 저장)

쿠키 노출 = 세션 노출


웹 보안 공격

  1. SQL Injection
  • ex) SELECT * FROM USERS WHERE auth='admin' AND id = ''OR '1' = '1'';
    항상 참인 값을 넣어서 로그인 성공, 탈취

  • 대응 방안

    1. 입력값 검증 ➡️ 화이트리스트 방식
    2. Prepared Statement 구문 사용 ➡️ 입력값을 단순한 텍스트로 인식
    3. Error Message 노출 금지
  1. CSRF : 주소가 다른 사이트에서 요청을 조작
  • 해커가 데이터에 직접 접근할 수 없음 (Origin이 다르기 때문)

  • 조건

    1. 쿠키를 사용한 로그인
    2. 예측할 수 있는 요청 / 파라미터를 가져야 함
  • 대응 방안

    1. CSRF 토큰 사용
    2. same-site 쿠기 사용 : 다른 사이트에 쿠키 전송을 막음
profile
어쩌다보니 tmi뿐인 블로그😎

0개의 댓글