Authentication

Sasha Park·2021년 4월 14일

HTTPS

Hyper Text Transfer Protocol Secure Socket
인증서를 기반으로 데이터 제공자의 신원을 보장받을 수 있으므로 공개키 암호화 방식을 사용.

layer: HTTP 요청을 SSL 혹은 TLS 라는 알고리즘을 이용해 내용을 암호화하여 데이터 전송.

Hashing

어떠한 문자열에 '임의의 연산'을 적용하여 다른 문자열로 변환하는 것. 극히 드물게 다른 입력된 값인데 해시된 값이 같은 경우가 발생. 그 이유는 해시된 값은 항상 고정된 길이의 값으로 나타내는 태생적 한계가 있으므로, 중복된 값이 발생 할 수 있음.

  1. 모든 값에 대해 hash 값을 계산하는데 오래 걸리지 않아야 한다.
  2. 최대한 hash 값을 피해야 하며, 모든 값은 고유한 hash 값을 가진다.
  3. 아주 작은 단위의 변경이라도 완전히 다른 hash 값을 가져야 한다.

Salt

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

  1. salt는 유저와 패스워드 별로 유일한 값을 가져야 함.
  2. 사용자 계정을 생성할 때와 비밀번호를 변경할 때마다 새로운 임의의 salt를 사용해서 hashing 해야함.
  3. salt는 절대 재사용 불가.
  4. salt는 db 유저 테이블에 같이 저장 필요.

서버에서 클라이언트에 데이터를 저장하는 방법의 하나.
로그인상태 유지, 각종 configulations 등을 저장해놓음. 하지만 기본적으로는 쿠키는 오랜 시간 동안 유지될 수 있고, 자바스크립트를 이용해서 쿠키에 접근할 수 있기 때문에 쿠키에 민감한 정보를 담지 말자.

  • Domain: 서버의 요청이 도메인과 일치하는 경우 쿠키 전송
  • Path: 서버와 요청의 세부경로가 일치하는 경우 쿠키 전송
  • MaxAge / Expires: 쿠키 유효기간 설정
  • HttpOnly: 스크립트의 쿠키 접근 가능 여부 결정
  • Secure: HTTPS 프로토콜에만 쿠키 전송 여부 결정
  • SameSite: CORS 요청의 경우 옵션 및 메서드에 따라 쿠키 전송 여부 결정
    Lax: 서로 다른 사이트여도 (Cross-Origin) get method에만 쿠키 전송 가능
    Strict: same-site 경우에만 쿠키 전송 가능.
    None: 모든 메서드 요청에 대해 쿠키 전송 가능. 단, HTTPS 프로토콜을 사용하는 것이 필수적.

Session

사용자가 인증에 성공한 상태.
서버가 client에 유일하고 암호화된 ID를 부여. 중요한 데이터는 서버에서 관리. Express-session 모듈을 이용하여 세션관리 가능. 보통 하나의 서버에서 접속 상태를 저장하므로, 여러 개의 서버를 가지고 있을 때 불리하다. 여러 개의 서버에서 같은 세션 데이터에 접근하고 싶을 때는 session clustering 혹은 공통 session store를 사용하자.

  • 로그아웃: 세션 아이디 (인증성공)가 담긴 쿠키가 클라이언트에 저장되어 있고, 서버는 세션을 저장하고 있음. 즉, 공공PC에서 로그아웃을 하지 않으면 바로 해킹당함.

req.session: 세션 저장소
express.session: 참조할 것.
set-cookie: connect.sid=__ 로그인 성공 응답.
인증이 필요한 정보 요청.

Cookie와 Session의 차이

Cross Site Request Forgery (사이트 간 요청위조)

사용자가 서버에게 보내는 요청을 다른 피싱사이트에서 위조하는 것임. 기존의 로그인한 기록(session)을 바탕으로 서버가 클라이언트의 요청을 믿기 때문에 발생함. sameSite 옵션을 none이 아닌 것으로 사용하면, 서버는 클라이언트에게 신뢰할 수 있는 요청이 아닌지를 판단할 수 있으므로, CSRF 공격 방지 가능.

해커는 GET과 POST를 통해 변조된 요청을 보내게 할 수 있으며, CORS 설정을 통해 해당 공격을 막는데 도움을 줄 수 있음.

profile
'어?' 에서 '아!'가 되는 순간을 즐기는 개발자입니다.

0개의 댓글