오늘 웹의 기초라는 책을 읽다가 아래와 같은 문구를 읽고 나서 의구심이 들었다.
PUT, DELETE 메서드는 웹사이트 조작의 위험이 있어 웹서버 측에서 대부분 사용할 수 없도록 설정한다.
최근에 진행했던 프로젝트에서 백엔드 개발자가 제공해주었던 api에는 PUT, DELETE가 들어있었다. 과연 보안이 취약한 게 맞는 걸까?
MDN 문서에도 안전함은 NO라고 되어 있다. 안전함이 보안상 취약한 것과 직접적인 연관이 있는 걸까?
안전함 (HTTP 메서드) - MDN Web Docs 용어 사전: 웹 용어 정의 | MDN
해당 링크를 들어가보면 PUT, DELETE는 서버의 상태를 변화시킬 수 있기 때문에 안전하지 않다고 표현한다고 한다. 그렇다면 PUT, DELETE 요청을 할 때 적절한 권한을 가진 사람만이 요청을 보낼 수 있도록 보안적인 부분을 보완한다면 PUT, DELETE 메서드를 사용하는 것이 무조건 보안을 취약하게 한다고만은 이야기할 수 없지 않을까?
해당 MDN 링크에서는 POST 요청 또한 안전하지 않은 메서드에 들어간다. 이 또한 서버의 상태를 변경시키기 때문일 거라 생각한다. 하지만 POST 요청 없이 api를 어떻게 구성한단 말인가, 그것 또한 말이 안되는 부분이다. 그렇기 때문에 서버의 상태를 변경하는 메서드가 안전하지 않다고 해서 보안이 무조건 취약할 거라고 생각하는 건 안되고 그에 따라 적절한 인증 권한을 부여해서 보안을 강화하면 된다고 생각한다.