Language (101) 썸네일형 리스트형 메서드 기반 권한 부여 - @PreFilter, @PostFilter @PreFilter@PreFilter 어노테이션은 메소드가 실행되기 전에 메소드에 전달된 컬렉션 타입의 파라미터에 대한 필터링을 수행하는데 사용@PreFilter 어노테이션은 주로 사용자가 보내온 컬렉션(배열, 리스트, 맵, 스트림) 내의 객체들을 특정 기준에 따라 필터링하고 그 중 보안 조건을 만족하는 객체들에 대해서만 메소드가 처리하도록 할 때 사용@PreFilter("filterObject.owner == authentication.name")public Collection updateAccounts(BankAccount[] data){ return data;}@PreFilter("filterObject.owner == authentication.name")public Collection updat.. 메서드 기반 권한 부여 - @PreAuthorize, @PostAuthorize Spring Security는 요청 수준의 권한 부여뿐만 아니라 메서드 수준에서의 권한 부여를 지원메서드 수준 권한 부여를 활성화 하기 위해서는 설정 클래스에 @EnableMethodSecurity 어노테이션을 추가SpEL(Spring Expression Language) 표현식을 사용하여 다양한 보안 조건을 정의 가능 @EnableMethodSecurityjsr250Enabled() - 기본값 falseJSR-250 관련 어노테이션들(@RolesAllowed, @PermitAll, @DenyAll) 을 활성화prePostEnabled() - 기본값 true@PreAuthorize, @PostAuthorize, @PreFilter, @PostFilter 를 활성화securedEnabled() - 기본값 .. 요청 기반 권한 부여 - HttpSecurity.securityMatcher() securityMatcher()securityMatcher 메소드는 특정 패턴에 해당하는 요청에만 보안 규칙을 적용하도록 설정할 수 있으며 중복해서 정의할 경우 마지막에 설정한 것으로 대체→ 지금까지는 모든 요청에 대해서 위에서부터 순차적으로 검사메서드설명securityMatcher(String... urlPatterns)특정 자원 보호가 필요한 경로를 정의securityMatcher(RequestMatcher... requestMatchers)특정 자원 보호가 필요한 경로를 정의→ AntPathRequestMatcher, MvcRequestMatcher 등의 구현체를 사용 가능 패턴 설정HttpSecurity를 /api/로 시작하는 URL에만 적용하도록 구성Spring MVC가 클래스 경로에 있으면 .. 표현식 및 커스텀 권한 구현 표현식 권한 규칙 설명스프링 시큐리티는 표현식을 사용해서 권한 규칙을 설정하도록 WebExpressionAuthorizationManager를 제공표현식은 시큐리티가 제공하는 권한 규칙을 사용하거나 사용자가 표현식을 커스텀하게 구현해서 설정 가능 사용 방법requestMatchers().access(new WebExpressionAuthorizationManager("expression")) 적용하기 커스텀 권한 표현식 구현 (권한)DefaultHttpSecurityExpressionHandler의 역할은 사용자가 커스텀하게 정의한 WebExpressionAuthorizationManager에 지정한 표현식 구문을 처리하는 클래스@customWebSecurity.check(authentication, r.. 요청 기반 권한 부여 - HttpSecurity.authorizeHttpRequests() Spring Security는 요청 기반 권한 부여(Request Based Authorization)와 메소드 기반 권한 부여(Method Based Authorization)를 통해 자원에 대한 심층적인 방어를 제공요청 기반 권한 부여는 클라이언트의 요청(HttpServletRequest) 에 대한 권한 부여를 모델링 하는 것이며 이를 위해 HttpSecurity 인스턴스를 사용하여 권한 규칙을 선언 가능 요청 기반 권한 부여 - HttpSecurity.authorizeHttpRequests()@BeanSecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception { http.authorizeHttpRequests(.. SameSite SameSite는 최신 방식의 CSRF 공격 방어 방법 중 하나로서 서버가 쿠키를 설정할 때 SameSite 속성을 지정하여 크로스 사이트 간 쿠키 전송에 대한 제어를 핸들링 가능 → 목적 : 쿠키 전송에 대한 제어 핸들링Spring Security는 세션 쿠키의 생성을 직접 제어하지 않기 때문에 SameSite 속성에 대한 지원을 제공하지 않지만 Spring Session은 SameSite 속성을 지원 Samesite 속성Strict동일 사이트에서 오는 모든 요청에 쿠키가 포함되고 크로스 사이트간 HTTP 요청에 쿠키가 포함되지 않음Lax(기본 설정)동일 사이트에서 오거나 Top Level Navigation에서 오는 요청 및 메소드가 읽기 전용인 경우 쿠키가 전송되고 그렇지 않으면 HTTP 요청에 쿠.. CSRF 통합 CSRF 공격을 방지하기 위한 토큰 패턴을 사용하려면 실제 CSRF 토큰을 HTTP 요청에 포함해야 함 → POST 방식으로 요청 시 반드시 토큰을 HTTP 요청에 포함그래서 브라우저에 의해 HTTP 요청에 자동으로 포함되지 않는 요청 부분(폼 매개변수, HTTP 헤더 또는 기타 부분) 중 하나에 포함되어야 함HTMP FormsHTML 폼을 서버에 제출하려면 CSRF 토큰을 hidden 값으로 Form에 포함해야 함폼에 실제 CSRF 토큰을 자동으로 포함하는 뷰는 다음과 같음 → 위의 코드처럼 굳이 input hidden으로 토큰 값을 저장하지 않아도 됨ThymeleafSpring 의 폼 태그 라이브러리 → JavaScript ApplicationsSingle Page ApplicationCookieCs.. CSRF 토큰 유지 및 검증 CSRF 토큰 유지 - CsrfTokenRepositoryCsrfToken은 CsrfTokenRepository를 사용하여 영속화 하며, 구현체인 HttpSessionCsrfTokenRepository와 CookieCsrfTokenRepository를 지원두 군데 중 원하는 위치에 토큰을 저장하도록 설정을 통해 지정 가능세션에 토큰 저장 - HttpSessionCsrfTokenRepository@BeanSecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception { HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository(); .. 이전 1 ··· 6 7 8 9 10 11 12 13 다음