며칠 전 면접 때 있었던 일이다.
플랜 빙고는 면접관에 의해 낱낱이 분석되었다.
그때, 면접관이 Network 탭의 Payload에서 비밀번호가 그대로 드러난 것을 발견했다.
나는 면접관으로부터 비밀번호를 암호화하는 것이 좋겠다는 피드백을 받았고, 나는 다음 업데이트에서 피드백을 반영하겠다고 약속했다.
그리고 오늘 Network 탭을 살펴보니, 나는 Payload의 의미도 잘 모르고 있다는 것을 발견했다.
그래서 이번 포스팅에서는 내가 공부한 내용과 Request Payload에 개인 정보가 보여도 괜찮은지에 관하여 쓰겠다.
HTTP 요청을 보낼 때 전달되는 데이터를 payload라고 합니다.
출처 - kakao 고객센터
페이로드(영어: payload)는 사용에 있어서 전송되는 '순수한 데이터'를 뜻한다.
출처 - 위키백과
정리하자면, payload는 브라우저가 웹 서버에 HTTP 요청을 보낼 때 전송되는 데이터다. 그런데 '순수한 데이터'란 무슨 말일까?
다음은 브라우저가 웹 서버에 보내는 HTTP 요청 '메시지'를 도식화한 이미지다.
메시지에는 헤더와 메타데이터 등 다양한 요소들이 있는데, 여기에서 전송의 근본적인 목적이 되는 데이터의 일부분을 페이로드라고 한다.
한 블로거가 아래와 같이 명료하게 비유해줬다.
우리가 택배 배송을 보내고 받을 때, 택배 물건이 페이로드이고, 송장이나 박스, 뽁뽁이와 같은 완충재 등은 부가적인 것이기 때문에 페이로드가 아니다.
출처 - [네트워크/HTTP] 페이로드(Payload)란?
이제 페이로드가 뭔지 알겠다.
면접관이 페이로드 안에 있는 비밀번호를 암호화하라는 건 데이터 전송 과정 중 보완 관련 이슈가 발생할 수 있기 때문에 한 말이었다.
공부하던 도중, 나는 아주 흥미로운 글을 발견했다.
누군가가 나와 같은 생각을 가지고 인프런에 아래와 같은 질문을 올린 것이다.
그리고 다음과 같이 답변이 되어있었다.
"보안상 문제가 없습니다. https만 적용하면 돼서요."
어라? https만 적용하면 아무 문제가 없다는 것이다.
내 프로젝트는 vercel로 배포한 것이었기에 자동으로 https가 적용되어있다. 그러므로 나는 굳이 암호화 작업을 안 해도 된다!
번거로운 작업을 안 해서 좋긴 한데, 정확히 https는 무슨 기능을 하는 걸까?
https가 보안상 좋다는 건 알고는 있는데 정확히 어떤 일을 하는지 몰라서 알아보기로 했다.
HTTPS는 하이퍼텍스트 전송 프로토콜 보안의 약자입니다. 클라이언트(웹 브라우저 등)와 서버 간에 교환되는 데이터를 암호화하여 인터넷을 통해 안전하게 통신하는 데 사용되는 프로토콜입니다. HTTPS는 SSL/TLS 암호화를 사용하여 비밀번호, 신용카드 번호 및 기타 개인 데이터와 같은 민감한 정보를 권한이 없는 당사자가 가로채서 읽지 못하도록 보호합니다. 일반적으로 온라인 쇼핑, 뱅킹 및 기타 민감한 데이터 전송과 같은 온라인 거래에서 안전한 통신을 위해 사용됩니다.
출처 - http를 https로 적용하기 (feat. ec2/node.js)
아하! HTTPS를 사용하면 자동으로 통신에 사용되는 데이터가 암호화되는구나!
그래서 HTTPS가 보안 측면에서 좋다는 것이었다.
문제에 관해 탐구하면서 두 가지를 느꼈다.
1. 네트워크 관련 지식을 면접이나 시험 대비로 얄팍하게 공부해왔다는 걸 느꼈다.
2. 프로젝트와 접목하여 지식을 쌓으니 훨씬 재밌고 잊지 못할 것 같다.
버전 업데이트를 한 것은 아니지만, 알아가는 것도 개발 과정 중 하나라고 생각하기에, 개발 노트 시리즈에 포스팅을 올려봅니다.