개요
API 규격을 정리하던 중 DELETE method도 사용해 보자는 의견이 나왔다.
그런데 주변에서 이런 이야기를 들었다.
DELETE는 서버 리소스를 제거할 수 있기 때문에 보안상 위험하다.
처음에는 “정말 그런가?” 싶어서
자료를 찾아보고 나름대로 기준을 정리해봤다.
결론부터 말하면
인증과 권한 검증이 제대로 되어 있다면 DELETE를 굳이 피할 이유는 없어 보였다.
내용
#1. DELETE 메서드는 정말 위험할까?
HTTP method에는 “안전하다(safe)”라는 개념이 있다.
MDN에서는 다음처럼 정의하고 있다.
- 서버 상태를 변경하지 않는 요청 → 안전
- 서버 상태를 변경하는 요청 → 안전하지 않음
여기서 의문이 생겼다.
그런데 POST도 서버의 리소스를 변경하는데 POST는 왜 허용하는 걸까?
만약 “리소스를 변경한다”는 이유만으로 method를 제한한다면
API 설계 자체가 불가능해진다.
결국 method 자체가 위험한 게 아니라
어떻게 보호하느냐의 문제 아닐까라는 생각이 들었다.
#2. POST는 필수 DELETE는 선택
[ POST는 새로운 리소스를 생성해 주는 측면에서 필수 ]
수정을 “새로운 상태로 생성”한다는 측면으로 바라본다면 PUT을 대체하는 게 가능하며,
삭제를 “공란의 상태로 생성”한다는 측면으로 바라본다면 DELETE를 대체하는 게 가능하다.
위처럼 정리할 수 있다고 보는데 일종의 말장난..으로 느껴졌다.
[ DELETE는 리소스를 삭제하는 명확한 목적과 용도로 사용 ]
다르게 말하면 삭제만 가능하다는 의미이다.
서버에 DELETE method를 허용한다면 외부 공격자에 의해서 데이터가 삭제될 수 있는 여지가 있다고 한다.
극소수의 API에서만 DELETE를 사용하면 괜찮지 않을까란 질문이 나올 수 있는데, 그렇지 않다고 대답할 수 있다.
DELETE method를 사용하는 API가 단 1개 있다고 하더라도 이를 위해서 DELETE 요청을 방화벽에서 통과시켜 줘야 하는데,
이를 인지한 외부 공격자는 API를 변조해서 DELETE 요청을 날릴 수 있게 되기 때문이다.
따라서 많은 서버들은 GET / POST 이외의 method들은 원천 차단하는 상황이다.
결제 시스템의 SDK와 API 디자인 - SLASH 21 | Growth log
PG 연동 개발자들에게 쉽고 빠른 가이드 제공을 위해, 20년 동안 유지된 기존 시스템에 추상화 레이어를 만들고 SDK와 API를 설계했던 경험을 공유합니다. 추가로 인터페이스의 일관성과 예측 가능
injun-woo30000.gitbook.io
#3 지금은 다르지 않을까?
[ 어쩌면 DELETE는 위험하다는 얘기가 낡은 것이지 않을까? ]
그때는 맞을 수 있지만 지금은 아닐 수 있지 않을까?
보안이 취약하다면 POST는 보안에 안전할까?
그렇지 않다. 동일하게 위험하다.
그렇기 때문에 인증/인가 정보를 같이 담아서 보내는 것이다.
왜냐하면 method로 보안 취약점을 구별하지 않기 때문이다.
PUT, DELETE 등의 http 메소드 질문있습니다. - 인프런 | 커뮤니티 질문&답변
누구나 함께하는 인프런 커뮤니티. 모르면 묻고, 해답을 찾아보세요.
www.inflearn.com
DELETE도 POST와 마찬가지로 인증/인가 정보를 보낼 수 있으면 되지 않을까?
조사한 바로는 Request Header에 담을 수 있다고 한다.
[API 설계] DELETE request 요청/처리/응답에 관한 소소한 고민
👨🏻💻 들어가며 최근 제한된 시간 안에 RESTful API를 설계하고 구현해야 했습니다. 그 와중에 아직 잘 숙지가 되지 않았는지 묘하게 위화감이 있는 부분이 있었는데요, 바로 DELETE 요청 메서
humblego.tistory.com
결론
DELETE method가 위험하다는 말은 완전히 틀린 말은 아니지만,
지금 기준에서는
method 자체가 아니라 인증/인가 설계가 더 중요한 것 같다.
그래서 개인적으로는
한 번 시도해 봐도 괜찮겠다.
정도로 정리했다.
'사이드 프로젝트 아카이빙 > 중고 거래 사이트' 카테고리의 다른 글
| [HTTPS] Vite HTTPS 개발 환경용 OpenSSL 인증서 발급 가이드 (0) | 2025.11.23 |
|---|---|
| [HTTPS] Vite 개발 환경에서 HTTPS 적용하기 with Proxy (0) | 2025.11.23 |
| [배포] Cloudflare Pages 배포에 인증 추가하기 (0) | 2025.11.23 |
| [Image Upload]이미지 리사이징(Resizing) with pica lib (0) | 2025.11.23 |
| [키워드 알림] 통신 방식 비교 (Polling, SSE) (1) | 2025.11.23 |