CSRF(Cross-Site Request Forgery)와 세션은 웹 애플리케이션 보안에서 중요한 개념입니다. 여기서 설명하는 이유는 Spring Security 설정에서 왜 특정 보안 설정을 하는지를 이해하기 위함입니다.
- 세션 관리와 SessionCreationPolicy.STATELESS:
- 상태 없는(stateless) 애플리케이션:
- 상태 없는 애플리케이션에서는 서버가 클라이언트의 상태를 유지하지 않습니다. 모든 요청은 독립적이며, 서버는 각 요청을 개별적으로 처리합니다.
- RESTful API는 일반적으로 상태가 없도록 설계됩니다. 이는 확장성과 성능 측면에서 유리합니다.
- SessionCreationPolicy.STATELESS:
- 이 설정은 서버가 HTTP 세션을 생성하지 않도록 합니다.
- 사용자가 각 요청마다 인증 정보를 보내야 하며, 서버는 요청을 받을 때마다 인증을 수행합니다.
- JWT(JSON Web Token) 같은 토큰 기반 인증 방식에서 주로 사용됩니다. 클라이언트는 각 요청에 토큰을 포함시켜야 하며, 서버는 이 토큰을 통해 사용자를 인증합니다.
- 상태 없는(stateless) 애플리케이션:
- CSRF 보호와 csrf.disable():
- CSRF 공격:
- CSRF 공격은 악성 웹사이트가 사용자를 속여서 사용자의 권한으로 다른 사이트에 요청을 보내게 하는 공격입니다.
- CSRF 보호는 주로 상태가 있는(stateful) 애플리케이션에서 중요합니다. 사용자가 로그인한 세션이 있는 경우, 공격자는 해당 세션을 악용할 수 있습니다.
- csrf.disable():
- 상태 없는(stateless) 애플리케이션에서는 서버가 세션을 유지하지 않기 때문에 CSRF 공격의 위험이 상대적으로 낮습니다.
- 따라서, RESTful API와 같은 상태 없는 애플리케이션에서는 CSRF 보호를 비활성화하는 것이 일반적입니다.
- CSRF 보호를 비활성화하면 서버는 불필요한 CSRF 토큰 검증을 하지 않으므로 성능이 향상될 수 있습니다.
- CSRF 공격:
이 설정들은 상태 없는 RESTful API를 구현할 때 일반적으로 사용됩니다. 다시 말해, SessionCreationPolicy.STATELESS와 csrf.disable() 설정은 서버가 클라이언트의 상태를 유지하지 않으며, 인증 및 권한 부여는 각 요청마다 별도로 처리된다는 것을 의미합니다. 이는 확장성과 보안성을 높이는 데 도움이 됩니다.
- sessionCreationPolicy(SessionCreationPolicy.STATELESS): 서버가 세션을 생성하거나 사용하지 않도록 설정합니다. 각 요청은 독립적으로 인증을 받아야 합니다.
- csrf(config -> config.disable()): CSRF 보호를 비활성화합니다. 이는 주로 상태 없는 애플리케이션에서 사용됩니다.
따라서, 이 설정은 RESTful API와 같은 상태 없는 애플리케이션에서 일반적으로 사용된다.
'네이버 클라우드 캠프' 카테고리의 다른 글
로드 밸런서 구성 (0) | 2024.06.13 |
---|---|
API Gateway (0) | 2024.06.07 |
시큐리티_UserDetailServiceImpl (0) | 2024.06.03 |
Spring Data REST (0) | 2024.06.03 |
JWT (0) | 2024.06.01 |