Inflearn brand logo image

인프런 커뮤니티 질문&답변

초보자님의 프로필 이미지
초보자

작성한 질문수

React, Node.js, MongoDB로 만드는 나만의 회사 웹사이트: 완벽 가이드

Ch6-3. (백엔드) routes/contact.js 문의글 상태변경, 삭제

PUT, DELETE 등의 http 메소드 질문있습니다.

해결된 질문

작성

·

81

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 메소드와 보안

  1. PUT & DELETE 사용에 대한 오해

    • PUT 및 DELETE 메소드는 HTTP/1.1 표준에 정의된 메소드로, 자원의 생성, 업데이트(수정), 삭제를 위해 설계되었습니다.
    • 보안상의 취약점은 해당 메소드를 사용해서 발생하는 것이 아니라, 서버에 잘못된 인증 및 권한 관리가 되어 있을 때 발생할 수 있습니다.
    • 즉, PUT 및 DELETE를 안전하게 사용하기 위해서는 적절한 인증 및 인가 체계를 마련하는 것이 중요합니다.
  2. 인증 및 권한 관리

    • 인증(Authentication): 사용자 확인이라고도 불리며, 사용자의 신원을 확인하는 과정입니다. 예를 들어, OAuth 또는 JWT를 통해 API 접근을 제어할 수 있습니다.
    • 인가(Authorization): 인증된 사용자가 어떤 자원에 대한 접근 권한을 가지고 있는지를 확인합니다. 예를 들어, 특정 사용자가 데이터 삭제 권한을 가지는지 확인합니다.

PUT, DELETE 대신 GET과 POST를 사용할 경우

  • GET 메소드: 주로 데이터를 조회하는 데 사용되며, 데이터 변경 작업에는 적합하지 않습니다. 따라서 사용하기 어렵습니다.
  • POST 메소드: 주로 자원을 생성하는 데 사용되지만, 자원의 상태를 수정하거나 삭제하기 위해서도 사용할 수 있습니다. 하지만 일반적이지는 않습니다.

대안 로직:
- 상태 변경 (State Update)
- 클라이언트가 특정 데이터를 업데이트해야 하는 요청을 /update와 같은 엔드포인트를 통해 POST 요청으로 보내고, 서버 측에서 로직에 따라 해당 데이터를 수정합니다.

  • 데이터 삭제 (Delete)
    • 삭제 요청을 /delete 엔드포인트로 POST 요청으로 보내고, 서버에서 특정 조건을 충족하면 데이터 삭제 로직을 수행합니다.

관련 질문 참고

유사한 질문 및 답변을 통해 더 많은 정보를 얻으실 수 있습니다:
- RESTful API에서 DELETE 요청의 보안,
- HTTP 메소드에 대한 이해와 활용.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

초보자님의 프로필 이미지
초보자

작성한 질문수

질문하기