[SPRING] 스프링 보안 : 클라이언트 유형별 (브라우저 / 비 브라우저) CSRF 활성화 / 비활성화
SPRING스프링 보안 : 클라이언트 유형별 (브라우저 / 비 브라우저) CSRF 활성화 / 비활성화
닥터는 말한다.
"CSRF 보호를 사용하는 경우 일반 사용자가 브라우저에서 처리 할 수있는 요청에 대해 CSRF 보호를 사용하는 것이 좋습니다. 브라우저가 아닌 클라이언트가 사용하는 서비스 만 만드는 경우에는 CSRF 보호. "
제 서비스가 제 3 자 외부 서비스와 같은 "브라우저"와 "비 브라우저"클라이언트 모두에 의해 사용될 예정이라면 스프링 보안은 특정 유형의 클라이언트에 대해 csrf를 독점적으로 비활성화하는 방법을 제공합니까?
참조 : http://docs.spring.io/spring-security/site/docs/3.2.0.CI-SNAPSHOT/reference/html/csrf.html
해결법
-
==============================
1.Spring Security XML에서이 작업을 수행 할 수있는 방법이있을 것이라고 확신하지만 Java Config를 사용하고 있기 때문에 여기에 내 솔루션이 있습니다.
Spring Security XML에서이 작업을 수행 할 수있는 방법이있을 것이라고 확신하지만 Java Config를 사용하고 있기 때문에 여기에 내 솔루션이 있습니다.
@Configuration @EnableWebSecurity public class SecurityConfig { @Configuration @Order(1) public static class SoapApiConfigurationAdapter extends WebSecurityConfigurerAdapter { protected void configure(HttpSecurity http) throws Exception { http .antMatcher("/soap/**") .csrf().disable() .httpBasic(); } } @Configuration public static class WebApiConfigurationAdapter extends WebSecurityConfigurerAdapter { protected void configure(HttpSecurity http) throws Exception { http .formLogin() .loginProcessingUrl("/authentication") .usernameParameter("j_username") .passwordParameter("j_password").permitAll() .and() .csrf().disable() } } }
-
==============================
2.IMHO, 상자 밖에서는 아무 것도 없습니다. 내가 귀하의 경우에 어떻게 할 것인가는 csrf가 면제되는 / api에 뿌리를 둔 URL의 계층 구조를 갖는 것입니다. 구성하기 쉽습니다. XML 설정에서
를 포함한 일반적인 블록을 가지고 있습니다. 단지 그것을 복제하고 첫 번째 블록을 수정하면됩니다. IMHO, 상자 밖에서는 아무 것도 없습니다. 내가 귀하의 경우에 어떻게 할 것인가는 csrf가 면제되는 / api에 뿌리를 둔 URL의 계층 구조를 갖는 것입니다. 구성하기 쉽습니다. XML 설정에서
를 포함한 일반적인 블록을 가지고 있습니다. 단지 그것을 복제하고 첫 번째 블록을 수정하면됩니다. <http pattern="/api/**"> ... <!-- csrf --> </http>
처음이므로 csrf를 사용하지 않고 / api 계층 구조에 대한 모든 요청이 트리거되고 다른 모든 요청이이를 사용합니다.
응용 프로그램의 정상적인 부분에서는 / api / ** url을 사용하지 않고 브라우저 이외의 용도로 사용합니다.
그런 다음 컨트롤러에서 일반 URL과 / api 아래에있는 복사본에 매핑합니다.
@Controller @RequestMapping({ "/rootcontrollerurl", "/api/rootcontrollerurl"}) class XController { @RequestMapping(value = "/request_part_url", ...) public ModelAndView method() { ... } }
(물론 rootcontrollerurl과 request_part_url은 비어있을 수 있습니다 ...)
그러나 csrf가 아닌 요청을 허용하고 결국에는 / api 계층 구조에서 컨트롤러를 제외시키는 보안 함의를 분석해야합니다.
-
==============================
3.다음은 특정 엔드 포인트에서 CSRF 보호를 비활성화하는 방법입니다. appconfig-security.xml에서 다음 예제와 같이 패턴 정보가있는 노드를 추가하십시오.
다음은 특정 엔드 포인트에서 CSRF 보호를 비활성화하는 방법입니다. appconfig-security.xml에서 다음 예제와 같이 패턴 정보가있는 노드를 추가하십시오.
<http security="none" pattern="/sku/*"/> <http security="none" pattern="/sku/*/*"/> <http security="none" pattern="/sku"/>
그냥 '*'기호를 사용하여 모든 요청을지도를 사용하려는 경우 순서가 중요하다는 것을 명심하십시오.
from https://stackoverflow.com/questions/26179940/spring-security-enable-disable-csrf-by-client-type-browser-non-browser by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring과 JsonTypeInfo 어노테이션을 사용하여 JSON을 다형성 객체 모델로 역 직렬화 (0) | 2019.03.14 |
---|---|
[SPRING] Spring Redis - application.properties 파일에서 구성을 읽습니다. (0) | 2019.03.14 |
[SPRING] Spring이 자리 표시자를 해결할 수 없음 (0) | 2019.03.14 |
[SPRING] Spring Async Uncaught Exception 핸들러 (0) | 2019.03.14 |
[SPRING] 봄에 상호 의존성 빈을 연결하는 방법? (0) | 2019.03.14 |