인증/보안 기초 (TIL 85일차)

EenSung Kim·2021년 6월 29일
0

"고난의 연속.."


HTTPS

HTTPS 는 HyperText Transfer Protocol Secure 의 약자로 HTTP 프로토콜의 암호화된 버전이라고 합니다. 사실 개발을 배우기 전에도 https 를 본 적은 있었죠. 다만 관심이 없었을 뿐..

기존의 http 프로토콜은 만약 중간에 요청이 탈취될 경우 쉽게 그 내용을 파악할 수 있어 보안성이 낮고 개인정보 유출의 우려가 있었다고 하는데요. https 는 주고받는 암호화하기 때문에 요청이 탈취된다 하더라도 그 정보를 파악하기 어렵게 된다고 합니다.

크롬에서는 주소창을 눌러서 url 을 보게 되면 제일 앞이 https 로 되어있는지를 알 수 있습니다. 아니면 주소창 바로 옆에 있는 자물쇠를 눌러서도 확인할 수 있죠. 특히 자물쇠를 누르면 "인증서" 라는 항목을 찾을 수 있는데요. 이는 https 프로토콜의 또 다른 특징 중 하나로, 공인된 기관이 관리하고 발급하는 인증서를 통해 해당 사이트가 안전한 데이터를 제공하는 신뢰할 만한 서버를 가졌는지 여부를 파악할 수 있습니다.


쿠키(Cookie)

인터넷을 사용하다 문제가 생겨 구글링을 하면 종종 쿠키를 지우고 시도해보라는 해결책을 찾을 수 있었죠. 요즘은 외국 사이트에 접속하면 종종 쿠키를 설정할지 여부를 물어보는 작은 창이 뜨기도 합니다.

쿠키는 쉽게 말해서 서버가 사용자의 컴퓨터에 데이터를 저장하는 방법이라고 합니다. 그렇다고 뭐 어마어마한 내용을 저장하는 것은 아니죠. 위키백과에 보면 쿠키에 대해 이런 설명을 찾아볼 수 있습니다.

쿠키는 소프트웨어가 아니다. 쿠키는 컴퓨터 내에서 프로그램처럼 실행될 수 없으며 바이러스를 옮길 수도, 악성코드를 설치할 수도 없다.

서버는 쿠키를 이용해서 데이터를 저장하고 필요한 경우 데이터를 불러올 수도 있지만, 여기에는 특정한 조건들이 필요합니다. 그리고 이러한 조건은 쿠키 옵션으로 표현할 수 있죠.

공식 문서에서 optional 로 표현된 7가지의 옵션이 바로 쿠키 옵션입니다. 순서대로 Expires, Max-Age, Domain, Path, Secure, HttpOnly, SameSite 가 있습니다.

ExpiresMax-Age 옵션은 세부 설정 방법은 조금 다르지만 둘 다 쿠키의 유효기간을 설정하는 옵션입니다.

Domain 옵션은 도메인 정보를 넣어 이를 서버와 비교할 수 있게 합니다. 만약 서버의 도메인이 일치하지 않는다면 쿠키를 전송할 수 없게 되죠.

Path 옵션을 통해서는 세부 경로를 지정할 수 있습니다. 기본은 '/' 로 설정이 되고 하위 경로를 전부 포함합니다. 만약 /item 으로 설정되어 있다면 /item/product/item/product/spec 등의 경로에 접근이 가능하다는 뜻입니다.

Secure 옵션은 쿠키를 전송할지 말지 여부를 프로토콜에 따라 결정할 수 있게 합니다. true 로 설정하면 https 프로토콜을 사용할 때만 쿠키를 전송할 수 있습니다. (공식 문서에서는 Secure 그 자체를 옵션으로 설정하는지 아닌지에 따라 결정됩니다.)

HttpOnly 옵션은 자바스크립트에서 브라우저의 쿠키에 접근할 수 있는지 여부를 결정하는 옵션입니다. 이름 때문에 다소 혼동되는 점이 있어보이긴 합니다만, 이 옵션을 true 로 지정하게 되면 자바스크립트에서 쿠키에 접근하는 것을 막아 보안이 강화된다고 이해할 수 있습니다. (제가 공부한 자료에서는 boolean 값을 설정하도록 되어있었지만, 공식문서에서는 Secure 에서와 마찬가지로 HttpOnly 그 자체를 옵션으로 설정하는지 아닌지에 따라 결정되는 것으로 안내하고 있습니다.)

SameSite 는 cross-origin 요청에 관한 옵션입니다. cross-origin 요청이 발생할 경우 서버에서 쿠키를 전송할지 여부를 Strict, Lax, None 3개의 부가 옵션으로 결정합니다. Strict 는 cross-origin 요청에 대해서 쿠키를 전송하지 않는 것이고, None 은 cross-origin 요청에도 same-site 요청과 마찬가지로 쿠키를 전송합니다. Lax 는 기본적으로 Strict 와 비슷하지만 몇 개의 예외사항을 둔 것이라고 하는데요. <a> 나 <link>, get 요청 등에 한해 예외적으로 쿠키를 전송하도록 하는 것이라고 합니다.

크롬 브라우저는 Lax 옵션을 기본 옵션으로 설정해두었다고 합니다. 자료를 몇 개 찾아보지 않았지만 비교적 최근에 결정된 사항인 듯 싶어요. 관련해서 조금 더 자세히 알아보고 싶으신 분을 위해 수강생 동료분이 소개해주신 관련 글을 하나 링크합니다.


계속해서 새로운(그리고 어려운) 내용들을 욱여넣느라, 잠자러 갈 때 쯤에는 머리가 뜨겁게까지 느껴지는 듯 합니다. 그래서 오늘은 진짜 가벼운 내용들만 조금 정리해봤어요. 개인적으로는 이렇게 한 번 정리하고 넘어가게 되면 그래도 조금 더 기억에 남는 것 같습니다.

profile
iOS 개발자로 전직하기 위해 공부 중입니다.

0개의 댓글