반응형
학습 내용
- HTTP와 HTTPS의 차이점
- 권한 부여(Authorization)와 인증(Authentication)
- Cookie/Session
HTTP, HTTPS, SSL
- HTTP : 브라우저에서 웹 클라이언트와 서버 간에 데이터를 전송하기 위한 통신 규약. 암호화 되어있지 않기 때문에 서버와 클라이언트 사이에서 전송되는 데이터의 보안이 취약하다.
- HTTPS : SSL나 TLS (이전 SSL이 TLS로 이름이 바뀐 것이기 때문에 사실상 둘은 같은 말이지만, 일반적으로는 TLS가 SSL이란 이름으로 사용된다.) 을 이용해서, HTTP 통신을 하는 과정에서 내용을 암호화하여 데이터를 전송한다.
- SSL : SSL 인증서는 클라이언트와 서버 간의 데이터 전송을 위한 통신을 제 3자가 보증하는 문서이며, 클라이언트가 서버에 접속한 후 서버가 클라이언트에게 인증서 정보를 전달한다. 클라이언트에서는 인증서의 정보를 신뢰할 수 있는지 검증한다. SSL은 공캐 키 방식과 대칭 키 방식이 있다.
인증서 발급
1. mkcert 설치
$ brew install mkcert
2. 인증서 생성
# 로컬을 인증된 발급기관으로 추가
$ mkcert -install
localhost라는 로컬 환경에 대한 인증서는 다음과 같이 생성한다.
$ mkcert -key-file key.pem -cert-file cert.pem localhost 127.0.0.1 ::1
key.pem은 개인키이므로 공개 되어서는 안되기 때문에 암호처럼 다뤄야 하며, git에 커밋할 때는 gitignore에 추가해 주어야 한다.
Cookie
쿠키는 클라이언트 로컬에 저장된다. 키와 값이 들어있으며, 다음과 같은 옵션들을 가진다.
- Domain : 서버에 접속할 수 있는 이름 (포트, www와 같은 서브 도메인, 세부 경로는 전부 포함하지 않는다.)
- Path : 서버가 라우팅을 할 때 사용하는 경로
- MaxAge or Expires : 쿠키가 유효한 기간을 설정한다. MaxAges는 앞으로 몇 초간 쿠키가 유효한지를 설정한다. Expires는 언제까지 유효할 것인지 Date를 클라이언트의 시간을 기준으로 지정한다. 유효한 기간이 지나면 쿠키는 자동으로 파괴된다. 만약 두 옵션이 모두 설정되어있지 않다면 브라우저의 탭을 종료해야 쿠키가 제거된다.
- Secure : 쿠키 전송 시에 프로토콜에 따른 쿠키의 전송 여부를 결정하며, true로 값을 설정할 경우에는 HTTPS 프로토콜을 사용해 통신해야만 쿠키를 전송할 수 있도록 한다.
- HttpOnly : 자바스크립트에서 브라우저의 쿠키에 접근할 수 있는지에 대한 여부를 결정하며, true로 값을 설정할 경우에는 자바스크립트로 쿠키에 접근하는 것이 불가능하다. 따로 명시해 주지 않는다면 false로 지정된다.
- SameSite : Cross-Origin 요청이 있을 경우에는 해당 항목의 옵션과 요청의 메소드를 통해 전송 여부를 결정한다. 옵션들의 종류는 다음과 같다.
Lax | Cross-Origin 요청이라면 GET 메소드에 대해서만 쿠키 전송 가능 |
Strict | Cross-Origin이 아닌 same-site(요청을 보낸 origin과 서버의 도메인이 같다.)의 경우에만 쿠키를 전송 가능 |
None | 항상 쿠키를 보낼 수 있으나, 쿠키 옵션 중 secure 옵션이 필요. |
Session
세션은 서버에 접속한 후 브라우저를 종료할 때 까지 유지된다. 웹 브라우저가 서버에 요청을 하면, 서버가 클라이언트에 Session Id를 부여하고 서버가 응답할 때 HTTP 헤더 중 Set-Cookie에 Session ID를 포함하여 전송한다. 이후에 클라이언트에서는 브라우저가 종료되기 전까지 다음 요청에 Session ID가 담겨있는 쿠키를 헤더에 넣어서 전송한다. 서버에서는 해당 ID를 확인한 뒤 세션에 대한 정보를 확인하고 응답한다.
더 공부해봐야 할 내용
- 암호화, hashing, salting
- express-session
반응형
'DEVELOP > Node.js' 카테고리의 다른 글
MVC 패턴이란 무엇인가? (0) | 2021.06.17 |
---|---|
[Auth] Session과 Token은 서로 절충 가능한가? (0) | 2021.06.16 |