This lesson introduces the basics of web security within Spring applications, focusing on how to use Spring Security to protect web services like the Family Cash Card service. The key topics covered include:
- Authentication: The process of verifying the identity of a user (Principal) using credentials such as a username and password. In web applications, authentication is maintained across requests using session tokens stored in cookies, which are automatically sent with each request.
- Spring Security and the Filter Chain: Spring Security integrates into the application's filter chain, intercepting incoming requests before they reach the controller. It checks for authentication and can block unauthorized requests by returning a 401 UNAUTHORIZED response.
- Authorization: After authentication, authorization determines what actions an authenticated user is permitted to perform. Spring Security uses Role-Based Access Control (RBAC), assigning roles to users and specifying which roles are required to access certain resources or perform specific operations.
- Same Origin Policy (SOP): A critical web security concept that prevents scripts on one origin (URI) from interacting with resources from another origin. SOP helps protect against malicious cross-site requests, such as unauthorized transactions on a banking site initiated from a different website.
- Cross-Origin Resource Sharing (CORS): A mechanism that allows servers to specify other origins that are permitted to access resources, effectively relaxing the SOP when necessary. Spring Security provides the
@CrossOrigin
annotation to configure allowed origins but advises caution, as using it without arguments permits all origins.
- Common Web Exploits:
- Cross-Site Request Forgery (CSRF): An attack where a malicious site sends unauthorized commands to a server where the user is authenticated. Protection involves using CSRF tokens, which are unique per request and prevent unauthorized actions. Spring Security has built-in CSRF protection enabled by default.
- Cross-Site Scripting (XSS): An attack that involves injecting malicious scripts into a trusted website, which then execute in the user's browser. XSS can lead to arbitrary code execution on the client or server side. Defenses include proper input validation and escaping special characters to prevent code injection.
The lesson emphasizes the importance of understanding these security concepts and demonstrates how Spring Security can be used to safeguard applications against common web vulnerabilities.
이 강의에서는 Spring 애플리케이션 내에서 웹 보안의 기본 사항을 소개하며, Family Cash Card 서비스와 같은 웹 서비스를 보호하기 위해 Spring Security를 사용하는 방법에 초점을 맞춥니다. 주요 내용은 다음과 같습니다:
- 인증(Authentication): 사용자(Principal)의 신원을 사용자 이름과 비밀번호와 같은 자격 증명을 통해 확인하는 과정입니다. 웹 애플리케이션에서는 쿠키에 저장된 세션 토큰을 사용하여 요청 간에 인증 상태를 유지하며, 쿠키는 각 요청 시 자동으로 전송됩니다.
- Spring Security와 필터 체인: Spring Security는 애플리케이션의 필터 체인에 통합되어 컨트롤러에 도달하기 전에 들어오는 요청을 가로챕니다. 인증을 확인하고, 인증되지 않은 요청에 대해 401 UNAUTHORIZED 응답을 반환하여 차단할 수 있습니다.
- 인가(Authorization): 인증 후에, 인가는 인증된 사용자가 수행할 수 있는 작업을 결정합니다. Spring Security는 역할 기반 접근 제어(RBAC)를 사용하여 사용자에게 역할을 할당하고, 특정 리소스나 작업에 필요한 역할을 지정합니다.
- 동일 출처 정책(SOP): 한 출처(URI)의 스크립트가 다른 출처의 리소스와 상호 작용하는 것을 방지하는 중요한 웹 보안 개념입니다. SOP는 다른 웹사이트에서 시작된 악의적인 크로스 사이트 요청으로부터 보호하는 데 도움을 줍니다.
- 크로스-오리진 리소스 공유(CORS): 서버가 다른 출처의 접근을 허용하도록 지정하여 SOP를 필요에 따라 완화하는 메커니즘입니다. Spring Security는
@CrossOrigin
애노테이션을 제공하여 허용된 출처를 구성할 수 있지만, 인자 없이 사용하면 모든 출처를 허용하므로 주의해야 합니다.
- 일반적인 웹 취약점:
- 크로스 사이트 요청 위조(CSRF): 사용자가 인증된 상태에서 악의적인 사이트가 서버에 승인되지 않은 명령을 보내는 공격입니다. 이를 방지하기 위해 각 요청마다 고유한 CSRF 토큰을 사용하며, Spring Security는 기본적으로 CSRF 보호 기능을 제공합니다.
- 크로스 사이트 스크립팅(XSS): 신뢰할 수 있는 웹사이트에 악성 스크립트를 주입하여 사용자의 브라우저에서 실행되도록 하는 공격입니다. 이는 클라이언트나 서버 측에서 임의의 코드 실행으로 이어질 수 있습니다. 방어 방법은 입력 값을 적절히 검사하고 특수 문자를 이스케이프 처리하여 코드 주입을 방지하는 것입니다.
이 강의는 이러한 보안 개념의 중요성을 강조하며, Spring Security를 활용하여 일반적인 웹 취약점으로부터 애플리케이션을 보호하는 방법을 보여줍니다.