서버에서 검증해야 하는 이유
✈️ 서버에서 검증해야 하는 이유
🎯 개요
평소 인터넷 사용 시 항상 웹브라우저를 통하지만, 사실 웹브라우저 없이도 서버에 요청을 보낼 수 있음 이게 웹 보안에서 가장 중요한 개념이고, 서버에서 반드시 검증해야 하는 이유임
📋 목록
- Postman이란?
- 식당 비유로 이해하기
- 실제 웹 서비스 예시
- 핵심 개념 정리
- 왜 이게 중요한가?
✏️ 먼저 알아야 할 것
- 평소 인터넷 사용 시 항상 웹브라우저(크롬, 사파리 등)를 통함
- 네이버 접속, 유튜브 시청, 쇼핑몰 구매 등 모두 브라우저 경유
- 그런데 사실 웹브라우저 없이도 서버에 요청을 보낼 수 있음
- 이게 웹 보안에서 가장 중요한 개념
✏️ Postman이란?
- 개발자들이 API를 테스트할 때 사용하는 프로그램
- 웹브라우저를 거치지 않고 서버에 직접 HTTP 요청을 보낼 수 있음
- 원래는 개발자가 자신이 만든 API가 잘 작동하는지 테스트하려고 쓰는 도구
- 악의적인 사용자가 비정상적인 요청을 보내는 데 악용될 수 있음
- 비슷한 도구로 curl, Insomnia, HTTPie 등이 있음
- 웹브라우저의 개발자 도구로도 비슷한 일이 가능함
✏️ 식당 비유로 이해하기
웹브라우저 = 메뉴판
식당에 갔다고 생각해보면 메뉴판에는 이렇게 써있음
- 짜장면 7,000원
- 짬뽕 8,000원
- 1인 1메뉴 주문 필수
메뉴판(웹브라우저)은 손님에게 “이렇게 주문하세요”라고 안내함 대부분의 손님은 메뉴판을 보고 정상적으로 주문함
서버 = 주방
주방(서버)은 실제로 요리를 만들고 내주는 곳 손님의 주문을 받아서 처리함
Postman = 주방에 직접 들어가는 것
어떤 손님이 메뉴판을 무시하고 주방에 직접 들어가서 요리사에게 말함
“짜장면 10그릇 주세요, 공짜로요”
이때 요리사(서버)가 어떻게 반응해야 할까?
✏️ 두 가지 식당 비교
| 위험한 식당 (검증 없음) | 안전한 식당 (검증 있음) |
|---|---|
| 손님: “공짜로 10그릇 주세요” | 손님: “공짜로 10그릇 주세요” |
| 요리사: “네, 알겠습니다” | 요리사: “결제부터 하세요” |
| → 그냥 줘버림 | → 거절함 |
💡특이사항
서버(요리사)가 직접 검증하지 않으면 악의적인 요청도 그대로 처리됨
✏️ 실제 웹 서비스 예시
게시판 서비스를 만들었다고 가정
상황 설정
- 철수가 게시글 작성함 (게시글 번호: 5)
- 웹페이지에서는 본인 글에만 “삭제” 버튼이 보임
- 영희는 철수의 글을 볼 수 있지만 삭제 버튼은 안 보임
일반적인 생각
“삭제 버튼이 안 보이니까 영희는 철수 글을 못 지우겠네!”
현실
영희가 개발을 조금이라도 알면 Postman 같은 프로그램을 열어서 이렇게 보낼 수 있음
DELETE /api/posts/5
(5번 게시글을 삭제해주세요)
✏️ 서버 코드에 따른 결과 비교
| 검증 없는 서버 | 검증 있는 서버 |
|---|---|
| 삭제 요청 들어옴 | 삭제 요청 들어옴 |
| → 바로 삭제 실행 | → “요청자가 작성자인가?” 확인 |
| → 아니면 거부 | |
| 결과: 철수 글이 삭제됨! | 결과: 요청 거절됨 |
✏️ 핵심 개념 정리
프론트엔드 검증 = 안내문
- 버튼 숨기기, 입력값 체크 등
- 친절한 사용자에게만 효과 있음
- 우회 가능 (Postman으로 직접 요청)
백엔드 검증 = 실제 잠금장치
- 서버 코드에서 직접 확인
- 모든 요청에 적용됨
- 우회 불가능
💡특이사항
안내문(프론트)은 무시할 수 있지만 잠금장치(백엔드)는 뚫을 수 없음
✏️ 왜 이게 중요한가?
만든 서비스에 10만 명이 가입했다고 상상해보면 그 중 단 한 명만 Postman 사용법을 알아도:
- 다른 사람 글을 마음대로 삭제
- 다른 사람 계정 정보를 수정
- 있지도 않은 쿠폰을 적용
- 결제 없이 상품을 주문
한 명의 악의적인 사용자 때문에 나머지 99,999명이 피해봄
🔄 개념 비교
| 개념 | 역할 | 특징 |
|---|---|---|
| 프론트엔드 검증 | 사용자 안내 | 버튼 숨기기, 입력값 체크 등 우회 가능 |
| 백엔드 검증 | 실제 보안 | 서버에서 직접 확인, 우회 불가능 |
| Postman | API 테스트 도구 | 브라우저 없이 서버에 직접 요청 가능 |
💡 요약
- 웹브라우저 없이도 서버에 요청을 보낼 수 있음
- 프론트엔드에서 버튼을 숨기는 것은 진짜 보안이 아님
- 서버(백엔드)에서 반드시 검증해야 함
“누가 이런 짓을 하겠어?”라고 생각하지 말 것 인터넷에는 항상 그런 사람이 있음
댓글남기기