Authentication

Doum Kim·2020년 9월 9일
0

보안

목록 보기
3/6

Authentication

암호화

Hashing?

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

서버 로직 내에서 이루어지며 상대적으로 정보가 노출되기 쉬운 클라이언트 상에서의 보안을 위해 사용한다.

Hashing 규칙

  • 해시 연산이 오래 걸리지 않아야한다.

  • 동일한 결과 값이 나오지 않는 알고리즘이 필요하다.

  • 아주 작은 단위의 변경도 전혀 다른 hash 값을 가져야한다.

Salting

아무리 암호화를 완벽하게 했다고 하더라도 해싱 알고리즘을 알고 있으면 복호화가 가능하다.

따라서 이것을 방지하기 위해 원본 값에 임의로 약속된 값을 추가하여 해시를 진행한다.

즉, 해시 알고리즘이 유출되더라도 원본 값을 보호할 수 있는 장치이다.

쿠키 & 세션

쿠키와 세션을 사용자 인증에 사용하는 이유를 살펴보자면 HTTP의 특징을 보면된다.

  1. connectionless 프로토콜 - 클라이언트의 요청을 서버에서 응답을 하면 연결은 끊어진다.
    (단, keep-alive로 재사용이 가능하다.)

  2. stateless 프로토콜 - 통신이 끝나면 클라이언트의 상태 정보를 유지하지 않는다.

하지만 우리가 네이버에 로그인을 하고 웹툰을 보고 쇼핑을 하고 블로그 하는 과정을 생각해보면

로그인 후 매번 새로운 요청을 할 때 마다 서버에 다시 아이디와 패스워드를 보내주지 않고

인증이 된 상태로 서비스를 이용할 수가 있다. 이렇게 서버는 클라이언트가 누구인지 계속 인증을 해줘야하는 상황에서

매번 계속 인증 과정을 거치는건 서버에게 많은 부하를 주는 것이다.

따라서 쿠키와 세션을 이용해 이런 단점을 해결한다.

그럼 쿠키부터 살펴보자.

쿠키

쿠키란 서버에서 클라이언트에 전송하는 작은 데이터 조각이다.

HTTP에서는 클라이언트의 상태 정보를 클라이언트에 쿠키로 저장을 해놓고 동일한 서버에서 재 요청 시 저장된 데이터를 요청과 함께 전송한다.

쿠키는 보통 세 가지의 목적을 위해 사용된다.

  • 세션 관리 (로그인, 장바구니, 게임 스코어)

  • 개인화 (사용자 선호, 테마 등의 개인 세팅)

  • 트래킹 (사용자 행동 기록 및 분석)

이전에는 클라이언트 측에 정보를 저장할 때 주로 쿠키를 사용했지만 최근에는 local storage와 session storage가 대신 그 역할을 해주고 있다.

쿠키 생성

헤더 옵션에 추가한다.

Set-Cookie : '쿠키 이름=쿠키 값'

보안

쿠키는 보통 유저와 그들의 인증된 세션을 식별하기 위해 사용된다.

따라서 쿠키를 가로채는 것은 인증된 유저의 세션을 가로채는 것으로 이어질 수 있다. (XSS 공격)

HttpOnly 속성으로 자바스크립트를 통해 쿠키 값에 접근하는 것을 막아 어느정도 XSS 공격 방지가 가능하다.

세션

일정 시간동안 (클라이언트가 웹 서버에 접속한 시점부터 브라우저를 종료하여 연결을 끝내는 시점) 같은 사용자로부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술

클라이언트가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라 한다.

웹 서버에 상태를 유지하기 위한 정보를 저장한다.

쉽게 생각해서 서버에 생성되는 쿠키라고 생각하면된다.

브라우저를 닫거나 서버에서 세션을 삭제했을 때만 삭제가 가능하고 쿠키보다 비교적 보안이 강하다.

각 클라이언트에게 바코드와 유사한 역할을 하는 고유 sessionID를 부여한다.

보안에 있어서 쿠키에 비해 장점이 있지만 세션만 사용하는 경우는 없다.

그 이유는 세션은 서버에 데이터를 저장하기 때문에 과도한 세션 사용은 서버의 부하를 가져온다.

따라서 세션과 쿠키를 적절하게 사용하는게 좋은 방법이다.

0개의 댓글