인증(Authentication) 절차 미비
- 인증(Authentication)은 인가(Authorization)와 함께 보안 관련 핵심 개념 중 하나
- 사용자의 신원을 확인하는 과정
- 아이디/패스워드 기반 로그인
- OAuth2.0 프로토콜을 통한 Social 인증
- 보통 어플리케이션은 인증영역과 인증되지 않은 영역(익명영역)으로 나눌 수 있음
- 익명 영역 — 사용자의 신원과 무관한 기능들
- 사용자의 민감 정보를 노출하지 않아야 함
- 시스템의 상태를 변경하거나 데이터를 관리할 수 있는 기능을 제공하지 않아야 함
- 인증 영역 — 사용자의 개인정보를 확인 하고, 수정할 수 있음

인가(Authorization) 처리의 미비
- 적절한 권한이 부여된 사용자들만 특정 기능 수행 또는 데이터 접근을 허용함
- 주어진 권한을 넘어서는 기능 수행은 민감 데이터 유출 등 보안사고 발생 가능성이 높음
- E-Commerce 서비스 사용자가 다른 고객의 주문 정보를 확인하거나 주문을 취소하고 수정할 수 있다면?
개판
크리덴셜(Credential) 보안
- 민감정보(연락처, 결제정보, 비밀번호 등)를 보호하는 것은 항상 최우선 순위를 둬야 하는 일
- 민간정보를 암호화하지 않고, 일반 텍스트로 저장하는 것은 매우 위험함
- 그런데 생각보다 기본이 지켜지지 않는 서비스가 많음
전송 레이어 보안
- 널리 알려진 웹 서비스에서 SSL 보호를 적용하지 않는 것은 존재하지 않음
다행히당연히 프로그래머스 웹 사이트도 SSL 보호가 적용됨

Spring Security는 어플리케이션 보안 관련 다양한 기능을 제공함
Spring Security is a powerful and highly customizable authentication and access-control framework. It is the de-facto standard for securing Spring-based applications.
Spring Security is a framework that focuses on providing both authentication and authorization to Java applications. Like all Spring projects, the real power of Spring Security is found in how easily it can be extended to meet custom requirements
- Spring Boot 웹 어플리케이션에
쉽게적용 가능하며 적은 노력으로 각 상황에 보안을 적용할 수 있음
- 사용자 인증 및 인가 처리는 기본
- 필요에 따라
쉽게커스터마이징 가능
- 다양한 확장 기능과 자연스러운 통합
- Spring Session (세션 클러스터 기능 추상화 제공)
- Spring Security Oauth (Oauth 1a, Oauth2 인증 프로토콜 제공)