목록분류 전체보기 (85)
경주장
스프링 시큐리티에서 인증 토큰(객체)으로 활용되는 것은 Authentication(인증)객체입니다. package org.springframework.security.core; import ... public interface Authentication extends Principal, Serializable { Collection
SpringSecurity에서는 다중 설정 클래스를 지원합니다. 여러 설정파일을 생성하여 모두 WebSecurityConfigurationAdapter를 상속받아 요청에 따라 필터기반의 보안처리를 다르게 할 수 있습니다. 요청에따른 적용은 설정 클래스의 requsetMatcher 파라미터와 @Order 어노테이션의 값에 따라 정해집니다. 설정 클래스의 requsetMatcher는 configure 매서드를 override하여 설정합니다. 따로 설정하지 않는다면 any requset에 대해서 적용됩니다. @EnableWebSecurity @Order(2) public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protecte..
서블릿 스펙에 정의된 Fliter는 Servlet Container에서 생성되고 실행된다. 따라서 Filter는 Spring Bean을 Injection받아 사용할 수 없다. 아래의 배경에 따라 DelegatingFilterProxy와 FilterChainProxy가 등장하게 된다. Filter도 Spring Bean으로 편하게 등록하고 주입하고 싶다! Filter도 Spring의 기술을 활용하고 싶다. DelegatingFilterProxy - 서플릿 필터, FilterChainProxy - 필터 빈 두가지 클래스를 통해 두가지 요구사항을 충족할 수 있게 된다. DelegatingFilterProxy는 서플릿 필터로써 약속된 이름 (springSecurityFilterChain)이라는 이름의 Sprin..
사이트 간 요청 위조 Cross Site Request Forgery(CSRF)는 사용자가 인증받은 웹 어플리케이션에서 원하지 않는 action을 하도록 하는 공격입니다. 공격 시나리오 1. 사용자는 웹 사이트(vulnerable.com)에 접속하여 정삭적인 쿠키를 발급받습니다. 2. 공격자는 악성 html 페이지가 장성된 페이지의 링크(vulnerable.com/post/my-bad-post)를 이메일, 게시판 등의 경로를 이용해 전달합니다. 3. 공격용 HTML 페이지는 사용자가 인증한 웹 사이트의 요청정보를 이미지 태그로 전달합니다. 4. 이용자가 공격용 웹 페이지를 열면, 브라우저는 이미지 파일을 받아오기 위해 공격용 url을 엽니다. 5. 이미 웹 사이트(vulnerable.com)의 인증을 받..
학습할 것(필수) 선택문 반복문 제어문(controll statement, control flow) 자바 프로그램을 시작하면 존재하는 main( ) 메소드의 { 부터 } 까지 위에서 아래로 실행하는 흐름을 개발자가 원하는 방향으로 바꿀 수 있게 해주는 것 제어문(조건식){ 코드 블럭 } 제어문의 종류는 조건문(conditional)과 반복문(iteration)이 있다. 조건문(conditional) 1. if문 if(조건식){ //조건식이 true라면 실행 } 2. if-else문 if(조건식){ //조건식이 true라면 실행 }else{ //조건식이 false라면 실행 } 3. if-else-if-else문 if(조건식1){ //조건식1이 true라면 실행 }else if(조건식2){ //조건식2가 t..
ExceptionTranslationFilter - 예외 처리 필터 - AuthenticationException : 인증 예외 AuthenticationEntryPoint 호출 - 로그인 페이지 이동/ 401 오류 코드 전달 등 인증 예외가 발생하기 전의 요청 정보를 저장 RequestCache - 사용자의 이전 요청 정보를 세션에 저장하고 이를 꺼내오는 캐시 메커니즘 SavedRequest - 사용자가 요청했던 request 파라미터 값들, 헤더 값 등이 저장 - AccessDeniedExeption : 인가 예외 AccessDeniedHandler에서 예외 처리 하도록 제공 http.exceptionHandling() - 예외 처리 기능 설정 http.exceptionHandling() .authe..
스프링 시큐리티의 권한 설정은 애플리케이션 빌드 순간에 결정되는 선언적 방식과 애플리케이션 구동중에 동적으로 설정하는 방식 두가지를 지원하며 각각 권한의 적용 범위로써 URL, Method를 설정 할 수 있다. 선언적 방식 URL http.antMatchers("/users/**").hasRole("USER) Method @PreAuthorize("hasRole("USER")") 동적 방식 - DB 연동 프로그래밍 URL/Method - To be Studied... http .antMatcher("/shop/**") .authorizeRequests() .antMatchers("/shop/login", "/shop/users/**").permitAll() .antMatchers("/shop/mypage..
SessionManagementFilter 수행하는 역할 1.세션 관리 - 인증 시 사용자의 세션정보를 등록, 조회, 삭제 등의 세션 이력을 관리 2.동시적 세션 제어 - 동일 계정으로 접속이 허용되는 최대 세션수를 제한 -여기서 session.expiredNow( )로 세션을 만료 시키면 ConccurentSessionFilter에서 확인 후 처리 3.세션 고정 보호 - 인증 할 때마다 세션쿠키를 새로 발급하여 공격자의 쿠키 조작을 방지 4.세션 생성 정책 - Always, If_Required, Never, Stateless ConcurrentSessionFilter •매 요청 마다 현재 사용자의 세션 만료 여부 체크 •세션이 만료로 설정되었을 경우 즉시 만료 처리 - session.isExpired..
세션 고정보호 공격자가 자신의 SessionID를 사용자의 Cookie에 심어 공격자의 세션 쿠키로 사용자가 로그인을 하면 서버에서는 공격자의 SessionID로 인증한 것과 마찬가지로 처리된다. 공격자는 사용자의 리소스를 접근할 수 있게 된다! 이 공격은 세션 고정 공격이라고 불린다. 이때 매 인증시 Session을 생성하거나 SessionID만 변경하는 것으로 해당 공격을 방어 할 수 있다. http .sessionManagement() .sessionFixation() : 세션 고정 정책 설정 http.sessionManagement() .sessionFixation() .changeSessionId();// 기본 값 - 인증 시 세션 아이디만 변경 //.migrateSession();// 서블릿 ..
동시 세션 제어 - 최대 세션 허용 개수를 초과한 요청이 발생했을 때 어떻게 처리할 것인가 Strategy 1 - 이전 사용자 세션 만료 - maxSessionPreventsLogin(false) 기본설정 Strategy 2 - 현재 사용자 인증 실패 - maxSessionPreventsLogin(true) http.sessionManagement( ) : 세션 관리 기능이 작동함 http.sessionManagement() .maximumSessions(1) // 최대 허용 가능 세션 수 , -1 : 무제한 로그인 세션 허용 .maxSessionsPreventsLogin(true) // 동시 로그인 차단함, false : 기존 세션 만료(default) .expiredUrl("/expired ") //..