Web Security 전체 지도

3줄 요약

  • Web Security는 Spring Security 설정 모음이 아니라 신뢰할 수 없는 요청이 서비스 안으로 들어와 자산에 닿기까지의 경계를 설계하는 일이다.
  • 공격자는 공개 API, 로그인, 브라우저 자동 동작, 권한 파라미터, 오류 응답, 로그 공백을 따라가며 검증이 빠진 지점을 찾는다.
  • 좋은 방어는 HTTP 진입점, Spring Filter, Controller 입력, Service 권한, Repository 조건, 브라우저 정책, 감사 로그가 같은 보안 결정을 바라보게 만든다.

핵심 정리

  • 백엔드 개발자가 먼저 그려야 할 것은 기능 목록이 아니라 요청 흐름과 신뢰 경계다. 어느 값이 브라우저에서 왔고, 어느 값이 서버에서 발급되었고, 어느 값이 DB에서 다시 확인되는지 구분해야 한다.
  • 인증은 principal을 만드는 절차이고, 인가는 principal이 특정 resource에 특정 action을 해도 되는지 판단하는 절차다. 로그인 성공은 리소스 접근 허가가 아니다.
  • 브라우저는 쿠키를 자동으로 보내고 Origin에 따라 응답 읽기를 제한한다. 이 특성 때문에 CORS, CSRF, SameSite, CSP는 API 보안과 분리할 수 없다.
  • 공격 요청은 대개 이상한 모양이 아니다. 정상 API에 userId, role, redirect_uri, Origin, Authorization, Cookie 같은 값만 조작되어 들어온다.
  • 운영 로그는 보안 설계의 일부다. 거부된 요청뿐 아니라 권한 변경, token 재발급, MFA 변경, 관리자 대리 작업처럼 나중에 사고를 복원해야 하는 이벤트를 구조화해야 한다.
  • 개인 프로젝트에서도 HTTPS, 비밀번호 해시, 안전한 쿠키, 권한 테스트, 민감 로그 마스킹은 기본선이다. 기업 환경에서는 여기에 승인 흐름, 탐지, 사고 대응, 보존 정책이 붙는다.

하위 문서 연결

    1. 웹 요청과 보안 경계 전체 흐름: Client, Gateway, Filter, Controller, Service, Repository, DB, Log 사이에서 값의 신뢰 수준이 어떻게 바뀌는지 본다.
    1. 공격자 관점으로 보는 웹 서비스: 공격자가 기능을 입력면, 권한면, 상태 변경면, 오류면, 운영면으로 나누어 탐색하는 방식을 정리한다.
    1. 인증 인가 브라우저 API 보안 연결: 인증, 인가, Cookie/JWT, CORS, CSRF, API 권한 검사가 어떻게 서로 보완되는지 연결한다.
    1. 개인 프로젝트와 기업 보안 수준 비교: 작은 서비스에서 반드시 해야 할 기본선과 기업 운영에서 필요한 승인, 감사, 탐지 수준을 비교한다.
    1. Web Security 학습 로드맵: HTTP 경계에서 시작해 인증, 인가, 브라우저 보안, API 입력, 운영 로그, 사고 대응으로 학습 순서를 잡는다.

헷갈리는 지점

  • Spring Security를 켜면 웹 보안이 끝난다고 생각하기 쉽다. 실제로는 인증 필터와 일부 공통 방어가 생길 뿐이다.
    • 핵심은 프레임워크가 막는 공격과 애플리케이션이 직접 판단해야 하는 권한, 입력, 로그를 구분하는 것이다.
    • 설정을 볼 때는 “이 설정이 막는 공격”, “남는 우회 경로”, “실패 로그”를 함께 확인한다.
  • CORS와 CSRF를 둘 다 브라우저 보안 문제로만 묶어 혼동하기 쉽다.
    • CORS는 주로 다른 Origin의 응답을 브라우저가 읽어도 되는지 결정한다.
    • CSRF는 피해자 브라우저가 쿠키를 자동 전송하는 성질을 악용한 상태 변경 문제다.
  • 로그는 장애 분석용이라고만 생각하기 쉽다.
    • 보안 사고는 시간이 지난 뒤 발견되는 경우가 많으므로 감사 로그가 증거가 된다.
    • 민감값은 남기지 말고 actor, resource, action, result, reason, traceId를 남긴다.

확인 질문

  • Web Security 전체 지도에서 가장 먼저 그려야 하는 것은 무엇인가?
    • 요청이 들어와 자산에 닿기까지의 신뢰 경계와 각 경계에서 검증해야 하는 값이다.
  • 로그인한 사용자라는 사실만으로 부족한 이유는 무엇인가?
    • 로그인은 신원 확인일 뿐이고, 특정 resource에 대한 action 허용 여부는 별도의 인가 판단이기 때문이다.
  • 좋은 보안 문서가 코드와 함께 보여 주어야 하는 것은 무엇인가?
    • 취약 요청, 개선 요청, 방어 설정, 운영 로그, 테스트 포인트, 위험 신호를 함께 보여 주어야 한다.