인프런 커뮤니티 질문&답변
PUT, DELETE 등의 http 메소드 질문있습니다.
해결된 질문
작성
·
207
0
안녕하세요. 오늘도 좋은강의 정말 감사히 듣고 있습니다.
제가 웹개발자가 아니라서 정확하게는 잘 모르긴 합니다.
6-3에서 문의글 상태변경, 삭제할때 PUT, DELETE 인 http메소드를 사용하시던데
제가 알기로는 PUT, DELETE는 보안에 취약한것으로 알고 있는데 사용해도 상관은 없는지 궁금합니다.
만약 사용하지 않는다면 상태변경, 삭제할때 GET과 POST방식만으로 어떤식으로 사용해야할지 로직정도만 알려주시면 감사하겠습니다.
답변 2
1
안녕하세요! 질문 주셔서 감사합니다 😊
말씀하신 PUT, DELETE 메서드가 보안에 취약한가?에 대한 부분과 권한 인증 방식에 대해서 정리해서 안내드리겠습니다.
Q1. PUT, DELETE 메서드가 보안에 취약한가?
A1. 질문에 답변드리기 전에 먼저 짚고 넘어가야 할 점이 있습니다.
HTTP 메소드(GET, POST, PUT, DELETE 등) 자체는 보안 수준을 구분하는 기능이 아닙니다.
이 메소드들은 단지 클라이언트가 서버에 어떤 작업을 요청하고자 하는지를 표현하는 방식일 뿐입니다.
예시를 들자면, 프론트엔드에서 "이 데이터를 수정해줘"라고 요청을 보낼 때, 백엔드는 그 요청을 보고 "아, 프론트엔드가 데이터를 수정하길 원하는구나!" 하고 알아차릴 수 있도록 정해둔 약속(규칙) == PUT 메소드가 바로 HTTP 메소드입니다. 즉, PUT, DELETE라고 해서 특별히 더 보안에 취약하다거나 안전하다고 보기는 어렵습니다. 말 그대로 약속이니까요.
실제로 중요한 것은 어떤 메소드를 쓰는가가 아니라, 그 요청을 처리하는 서버 쪽에서 적절한 인증/인가, 권한 검사, 입력 검증, HTTPS 사용 등이 얼마나 잘 구현되어 있는가입니다.
아마 이후 챕터에서 이전에 만든 authenticateToken 함수를 사용해서 JWT 토큰 인증으로 토큰을 가진 사용자만 PUT 요청이 실제로 이뤄질 수 있도록 하는 권한 검사 기능 구현이 있을 것 입니다.
const authenticateToken = (req, res, next) => {
const token = req.cookies.token;
if (!token) {
return res.status(401).json({ message: "토큰이 없습니다." });
}
try {
const decoded = jwt.verify(token, process.env.JWT_SECRET);
req.user = decoded;
next();
} catch (error) {
return res.status(403).json({ message: "유효하지 않은 토큰입니다." });
}
};
// authenticateToken을 미들웨어로 사용
router.put("/:id", authenticateToken, async (req, res)1
안녕하세요, 인프런 AI 인턴입니다. 초보자님께서 문의하신 HTTP 메소드 PUT 및 DELETE 사용과 관련된 질문에 대해 안내 드리겠습니다.
HTTP 메소드와 보안
PUT & DELETE 사용에 대한 오해
- PUT 및 DELETE 메소드는 HTTP/1.1 표준에 정의된 메소드로, 자원의 생성, 업데이트(수정), 삭제를 위해 설계되었습니다.
- 보안상의 취약점은 해당 메소드를 사용해서 발생하는 것이 아니라, 서버에 잘못된 인증 및 권한 관리가 되어 있을 때 발생할 수 있습니다.
- 즉, PUT 및 DELETE를 안전하게 사용하기 위해서는 적절한 인증 및 인가 체계를 마련하는 것이 중요합니다.
- PUT 및 DELETE 메소드는 HTTP/1.1 표준에 정의된 메소드로, 자원의 생성, 업데이트(수정), 삭제를 위해 설계되었습니다.
인증 및 권한 관리
- 인증(Authentication): 사용자 확인이라고도 불리며, 사용자의 신원을 확인하는 과정입니다. 예를 들어, OAuth 또는 JWT를 통해 API 접근을 제어할 수 있습니다.
- 인가(Authorization): 인증된 사용자가 어떤 자원에 대한 접근 권한을 가지고 있는지를 확인합니다. 예를 들어, 특정 사용자가 데이터 삭제 권한을 가지는지 확인합니다.
- 인증(Authentication): 사용자 확인이라고도 불리며, 사용자의 신원을 확인하는 과정입니다. 예를 들어, OAuth 또는 JWT를 통해 API 접근을 제어할 수 있습니다.
PUT, DELETE 대신 GET과 POST를 사용할 경우
- GET 메소드: 주로 데이터를 조회하는 데 사용되며, 데이터 변경 작업에는 적합하지 않습니다. 따라서 사용하기 어렵습니다.
- POST 메소드: 주로 자원을 생성하는 데 사용되지만, 자원의 상태를 수정하거나 삭제하기 위해서도 사용할 수 있습니다. 하지만 일반적이지는 않습니다.
대안 로직:
- 상태 변경 (State Update)
- 클라이언트가 특정 데이터를 업데이트해야 하는 요청을 /update와 같은 엔드포인트를 통해 POST 요청으로 보내고, 서버 측에서 로직에 따라 해당 데이터를 수정합니다.
- 데이터 삭제 (Delete)
- 삭제 요청을
/delete엔드포인트로 POST 요청으로 보내고, 서버에서 특정 조건을 충족하면 데이터 삭제 로직을 수행합니다.
- 삭제 요청을
관련 질문 참고
유사한 질문 및 답변을 통해 더 많은 정보를 얻으실 수 있습니다:
- RESTful API에서 DELETE 요청의 보안,
- HTTP 메소드에 대한 이해와 활용.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.






아아 제가 잘못 알고 있던 부분이였군요.
답변 감사합니다!