WEB/spring

Spring Security란? (1)

bpeach 2024. 1. 18. 13:36

Spring Security란?

- 스프링 기반 웹 애플리케이션에서 보안을 처리하기 위한 강력하고 포괄적인 프레임워크이다. 사용자 인증과 권한 부여를 관리하며, 웹 애플리케이션에서 발생할 수 있는 다양한 보안문제에 대응하기 위한 다양한 기능을 제공한다.

 

[주요 기능과 특징]

1. 인증 : 사용자가 누구인지 확인하는 과정으로 사용자의 아이디와 비밀번호를 사용하여 로그인하는 것이 대표적이다. Spring Security는 다양한 인증 메커니즘을 지원하며, 사용자 인증이 성공하면 보안 컨텍스트를 생성하여 사용자의 정보를 저장한다.

2. 권한 부여 : 사용자에 대한 권한을 관리하고, 특정 리소스 또는 기능에 접근 권한을 부여한다. Spring Security는 권한 기반 접근 제어를 제공하며, 사용자가 특정 권한을 갖고 있는지 학인하는 메커니즘을 제공한다.

3. 보안 설정 및 필터 체인 : 보안 관련 설정을 통해 애플리케이션의 보안 정책을 정의할 수 있다. 내장된 필터 체인을 사용하여 요청에 대한 보안 검사 및 처리를 수행한다.

=> 보안 설정) java 또는 xml 설정 파일을 통해 이루어진다. 예로 특정 URL 패턴에 대한 접근 권한, 사용자 로그인 및 인증 방법, 세션 관리 등이 설정된다.=> 필터 체인) Spring Security는 내부적으로 여러 보안 관련 필터를 사용하여 요청에 대한 처리를 수행한다. 예로 사용자 인증, 권한 부여, CSRF 방어, 세션 관리 등을 다루는 필터들이 있다.

4. 세션 관리 : 사용자의 세션을 관리하고, 세션 고정 공격으로부터 보호하며, 세션 타임 아웃 등을 설정할 수 있다.

5. CSRF 방어 : CSRF 공격으로부터 보호하기 위한 기능 제공한다.

=> CSRF 공격) 공격자가 특정 사용자의 권한을 이용하여 사용자가 의도하지 않은 동작을 수행하게 하는 공격이다.

------ 사용자가 이미 인증된 상태에서 이루어지고(쿠키 정보),  사용자의 동의 없이 웹에서 특정 동작 수행하게 하거나, 악의적인 웹 사이트를 통해 공격을 시도하는 것이다.(이때 이미 다른 사이트에 로그인되어 있어 있는 상태) ------

=> CSRF 방어 방법) [1] 서버에서 사용자의 세션과 연관된 CSRF 토큰이 생성되어 각 요청마다 이 토큰을 검증함으로써 방어가 가능한다. [2] SameSite 쿠키 속성을 활용하여 쿠키가 어떤 상황에서 전송될 수 있는지를 제한하는 데 사용한다. [3] Secure 및 HttpOnly 속성을 쿠키에 적절히 설정하고, CSP(Content Security Policy) 등의 보안 헤더를 사용하여 공격을 어렵게 만들 수 있다. 

6. Remember-Me 기능 : 사용자가 로그인 정보를 기억할 수 있는 기능을 지원한다.

7. LDAP, OAuth 등과의 통합 : 다양한 외부 인증 및 권한 부여 메커니즘과의 통합을 지원한다.

8. 암호화 및 해시 기능 : 사용자 비밀번호를 안전하게 저장하기 위한 암호화 및 해시 기능을 제공한다.

 

 

Spring Security 설정

1. Spring Security 의존성 추가 : 프로젝트의 의존성 관리 도구(Maven 또는 Gradle)를 사용하여 Spring Security 의존성 추가한다.

2. Spring Security 설정 : application.yml 또는 application.properties 파일에서 Spring Security에 관한 설정을 추가한다. 사용자 인증, 권한 부여, 세션 관리 등을 다룬다. 기본적으로 Spring Security는 메모리 임베디드된 사용자 정보를 사용하여 테스트 용도로 제공된다.

3. 로그인 페이지 자동 생성 : Spring Security가 활성화되면, 사용자가 인증되지 않았을 때 자동으로 로그인 페이지가 생성된다. 이는 일반적으로 '/login' 경로에 해당된다.

===> Spring Security의 인증 메커니즘이 사용자를 인증하고, 제공된 이름 및 비밀번호로 로그인을 수행하기 때문에 로그인 창으로 이동한다. 개발 중에는 간편하게 테스트용으로 사용하도록 설정되어 있지만, 운영 환경에서는 보안을 강화해야 한다.