본문 바로가기

사이드 프로젝트 아카이빙/중고 거래 사이트

[HTTP method] DELETE method 의견 및 사용

반응형

개요

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들은 원천 차단하는 상황이다.

image

 

결제 시스템의 SDK와 API 디자인 - SLASH 21 | Growth log

PG 연동 개발자들에게 쉽고 빠른 가이드 제공을 위해, 20년 동안 유지된 기존 시스템에 추상화 레이어를 만들고 SDK와 API를 설계했던 경험을 공유합니다. 추가로 인터페이스의 일관성과 예측 가능

injun-woo30000.gitbook.io


#3 지금은 다르지 않을까?

[ 어쩌면 DELETE는 위험하다는 얘기가 낡은 것이지 않을까? ]

그때는 맞을 수 있지만 지금은 아닐 수 있지 않을까?

보안이 취약하다면 POST는 보안에 안전할까?

 

그렇지 않다. 동일하게 위험하다.

그렇기 때문에 인증/인가 정보를 같이 담아서 보내는 것이다.

 

왜냐하면 method로 보안 취약점을 구별하지 않기 때문이다.

image

 

PUT, DELETE 등의 http 메소드 질문있습니다. - 인프런 | 커뮤니티 질문&답변

누구나 함께하는 인프런 커뮤니티. 모르면 묻고, 해답을 찾아보세요.

www.inflearn.com

 

DELETE도 POST와 마찬가지로 인증/인가 정보를 보낼 수 있으면 되지 않을까?

조사한 바로는 Request Header에 담을 수 있다고 한다.

 

[API 설계] DELETE request 요청/처리/응답에 관한 소소한 고민

👨🏻‍💻 들어가며 최근 제한된 시간 안에 RESTful API를 설계하고 구현해야 했습니다. 그 와중에 아직 잘 숙지가 되지 않았는지 묘하게 위화감이 있는 부분이 있었는데요, 바로 DELETE 요청 메서

humblego.tistory.com


결론

DELETE method가 위험하다는 말은 완전히 틀린 말은 아니지만,

지금 기준에서는

method 자체가 아니라 인증/인가 설계가 더 중요한 것 같다.

 

그래서 개인적으로는

한 번 시도해 봐도 괜찮겠다.

 

정도로 정리했다.

반응형