우리의 웹 애플리케이션을 보면
Spring Security를 사용하여
CORS 문제들을 다뤄보았습니다
이제 두 개의 다른 애플리케이션의
소통이 가능해졌습니다
하나는 UI 클라이언트고
또 다른 하나는 Spring Boot 웹 애플리케이션이었습니다
이제 또 다른 보안 개념인 CSRF를
배워볼 차례입니다
CORS와 다르게 CSRF는 보안 공격입니다
브라우저 안에 있는 보호 정책이 아닙니다
오히려 이는 보안의 취약성이며
해커들이 이 기술을 이용해
웹 애플리케이션으로부터 데이터를 훔치거나
웹 퍼블리케이션에 자신들에게 유리한
작업을 수행하기도 합니다
기본적으로 Spring Security CSRF으로부터의 보호를 제공합니다
어떻게 CSRF 공격으로부터 보호하는가 하면
어떠한 포스트 작업도 허용하지 않으며
데이터베이스에 업데이트를 요구하거나
새로운 데이터가 생성되는 것을 허용하지 않습니다
이 동작들은 기본적으로
Spring Security에서 차단시킵니다
하지만 그런 기본적인 자세로는 충분하지 않습니다
왜냐하면 실제로는
수많은 데이터들이 우리의 웹 애플리케이션에 들어오고
기존 데이터를 업데이트하는 것을 지원하기 때문입니다
웹 애플리케이션에서는
ProjectSecurityConfig 클래스
안에서 한 것들이
CSRF 보호막을 비활성화했습니다
왜냐하면 최근에 등록 API를 불러들여
새로운 유저를 추가하려 할 때
Spring Security 프레임워크가
이를 CSRF 공격으로 받아들여 403 에러가 발생했었습니다
그래서 지난 섹션들에서
CSRF 보호막을 비활성화했었고
그래서 공식적으로
추천하는 접근이 아니라고 했었던 것입니다
Spring Security 프레임워크에서
절대 CSRF를 비활성화해서는 안 됩니다
대신 알맞는 CSRF 해결책들을
웹 애플리케이션을 위해 구현하시기 바랍니다
이제부터
CSRF.disable을 제거해보도록 하겠습니다
바뀐 내용들은 저장하겠습니다
저장을 하면
빌드를 해봅시다
빌드가 완료되었다면 웹 애플리케이션에서
백엔드 애플리케이션으로
새로운 데이터를 게시하는
작업을 보여드리겠습니다
그리고 같은 과정에서
Spring Security 프레임워크가 어떻게 변화에 반응하는지도 보여드리겠습니다
제일 첫 번째로 불러올 동작은
등록 작업입니다
이것은 포스트 작업이기 때문에 백엔드 애플리케이션에
새로운 데이터가 생성됩니다
이것을 불러오면
403 에러로
권한 접근이 금지되었다고 나옵니다
이 권한 접근 금지 에러는
Spring Security가 포스트 작업을 차단하면서 생기는 것입니다
추가되는 작업들도 마찬가지로
에러가 발생하고
이것을 put으로 변경하면
역시나 403 에러가 발생합니다
웹 애플리케이션 안에 있는
다른 포스트 작업에 대해서도 확인해 볼 수 있습니다
이 포스트 작업은
문의하기 (CONTACT US) 페이지에서 작동시킬 수 있습니다
누군가 질문이 있을 때나
언제든 은행 직원에게 연락하고 싶을 때마다
이 양식을 작성해야 합니다
그리고 이 Send Message(전송) 버튼 눌러 전송할 것입니다
이것이 백엔드에 포스트 작업을 불러올 것이며
게시 요청을 보내면
어떻게 되는지 봅시다
브라우저의 도움을 받아야 합니다
여기에는 정보를 입력할 수 있고
예를 들어 Eazy Bytes 가 이름이고
이메일을 선택해서
tutor@eazybytes.com를 입력하고
Subject (제목) 칸에는 Sample message의 내용을 작성합니다
Message (메세지) 칸에는
Detailed message라고 써보겠습니다
전송 버튼을 누르기 전에
브라우저 안에서
여기 개발자 콘솔을 열어보겠습니다
Console을 보면
현재 존재하는 메시지들을 전부 삭제하겠습니다
이제 전송 버튼을 누릅니다
Spring Security가 또
비지니스 로직에 접근하려는 요청을
에러 403로 차단하고 있습니다
이 작업의 네트워크를 확인해보면
상태 코드 403을 확인할 수 있습니다
기본적으로 Spring Security는
누군가 백엔드 애플리케이션을
공격하고 있다고 여기고 있습니다
왜냐하면 몇몇 작업들을 초기화하고 업데이트하거나
백엔드에 새로운 데이터를 생성해야 하기 때문입니다
이런 모든 유형의 작업은 동작을 중지시킵니다
GET 작업을 확인해봐도
공지사항(NOTICES) 페이지를 보면
공지사황이 표시되는데 무슨 뜻이냐면
백엔드 소통이 원활히 되고 있다는 것입니다
이 상황에서는 Spring Security가
CSRF 보호막을 사용하여 차단시키고 있지 않습니다
그 이유는 그저
기존 데이터를 가져오려는 것이기 때문입니다
어떠한 변화도 주지 않습니다
그래서 기본 Spring Security가 GET 작업들을 허용합니다
CSRF를 비활성화하거나
웹 애플리케이션으로 CSRF를 해결하기 전까지는
어떠한 데이터 업데이트나 추가 옵션을 허락하지 않을 겁니다
오늘 다룬 것을 잘 이해하셨길 바랍니다
여기서 문제는 무엇이겠습니까?
CSRF를 완전히 비활성화할 수는 없다는 것입니다
그건 권장하지 않기 때문입니다
하지만 비활성화 설정들을 전부 지우면
웹 애플리케이션에서의 post와 put 작업들은
전부 실패할 것입니다
다음 강의에서는 일단
CSRF가 무엇인지 이해해보고
해커들이 CSRF를 통해 어떻게
웹 애플리케이션을 공격하는지와
그 다음엔 Spring Security 프레임워크를 활용한
해결방안들에 대해 배워 보겠습니다
감사합니다 다음 강의 때 뵙겠습니다