[SPRING] 스프링 보안 3.2 특정 URL에 대한 CSRF 비활성화
SPRING스프링 보안 3.2 특정 URL에 대한 CSRF 비활성화
Spring 보안 3.2를 사용하는 Spring MVC 애플리케이션에서 CSRF를 사용 가능하게했다.
내 spring-security.xml
<http>
<intercept-url pattern="/**/verify" requires-channel="https"/>
<intercept-url pattern="/**/login*" requires-channel="http"/>
...
...
<csrf />
</http>
요청 URL에 'verify'가 포함 된 요청에 대해 CSRF를 비활성화하려고합니다.
MySecurityConfig.java
@Configuration
@EnableWebSecurity
public class MySecurityConfig extends WebSecurityConfigurerAdapter {
private CsrfMatcher csrfRequestMatcher = new CsrfMatcher();
@Override
public void configure(HttpSecurity http) throws Exception {
http.csrf().requireCsrfProtectionMatcher(csrfRequestMatcher);
}
class CsrfMatcher implements RequestMatcher {
@Override
public boolean matches(HttpServletRequest request) {
if (request.getRequestURL().indexOf("verify") != -1)
return false;
else if (request.getRequestURL().indexOf("homePage") != -1)
return false;
return true;
}
}
}
Csrf 필터는 'verify'에서 제출 된 CSRF 토큰의 유효성을 검사하며 http에서 https에 대한 요청을 제출할 때 잘못된 토큰 예외 (403)가 발생합니다. 그런 시나리오에서 어떻게 csrf 토큰 인증을 비활성화 할 수 있습니까?
해결법
-
==============================
1.나는 이것이 직접적인 대답은 아니라는 것을 알고 있지만, 사람들은 (나 같은) 대개 이런 종류의 질문을 검색 할 때 스프링의 버전을 명시하지 않는다. 따라서 봄 보안 이후 일부 경로를 무시할 수있는 방법이 있습니다.
나는 이것이 직접적인 대답은 아니라는 것을 알고 있지만, 사람들은 (나 같은) 대개 이런 종류의 질문을 검색 할 때 스프링의 버전을 명시하지 않는다. 따라서 봄 보안 이후 일부 경로를 무시할 수있는 방법이 있습니다.
다음 사항은 CSRF 보호가 무시한다는 것을 보장한다.
http .csrf() .ignoringAntMatchers("/sockjs/**") .and() ...
-
==============================
2.내 대답이 다른 사람을 도울 수 있기를 바랍니다. 이 질문은 스프링 부트의 특정 URL에 대해 CSRF를 비활성화하는 방법을 찾아 냈습니다.
내 대답이 다른 사람을 도울 수 있기를 바랍니다. 이 질문은 스프링 부트의 특정 URL에 대해 CSRF를 비활성화하는 방법을 찾아 냈습니다.
여기에 설명 된 솔루션을 사용했습니다. http://blog.netgloo.com/2014/09/28/spring-boot-enable-the-csrf-check-selectively-only-for-some-requests/
이것은 일부 URL에서 CSFR 제어를 비활성화 할 수있는 스프링 보안 구성입니다.
@Configuration @EnableWebMvcSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { // Build the request matcher for CSFR protection RequestMatcher csrfRequestMatcher = new RequestMatcher() { // Disable CSFR protection on the following urls: private AntPathRequestMatcher[] requestMatchers = { new AntPathRequestMatcher("/login"), new AntPathRequestMatcher("/logout"), new AntPathRequestMatcher("/verify/**") }; @Override public boolean matches(HttpServletRequest request) { // If the request match one url the CSFR protection will be disabled for (AntPathRequestMatcher rm : requestMatchers) { if (rm.matches(request)) { return false; } } return true; } // method matches }; // new RequestMatcher // Set security configurations http // Disable the csrf protection on some request matches .csrf() .requireCsrfProtectionMatcher(csrfRequestMatcher) .and() // Other configurations for the http object // ... return; } // method configure @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { // Authentication manager configuration // ... } }
이것은 Spring Boot 1.2.2 (및 Spring Security 3.2.6)와 함께 작동합니다.
-
==============================
3.스프링 보안 v4.1을 사용하고 있습니다. 읽기 및 테스트를 많이 한 후에 XML 구성을 사용하여 특정 URL에 대한 crcf 보안 기능을 비활성화합니다.
스프링 보안 v4.1을 사용하고 있습니다. 읽기 및 테스트를 많이 한 후에 XML 구성을 사용하여 특정 URL에 대한 crcf 보안 기능을 비활성화합니다.
<beans:beans xmlns="http://www.springframework.org/schema/security" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation=" http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-4.1.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"> <http pattern="/files/**" security="none" create-session="stateless"/> <http> <intercept-url pattern="/admin/**" access="hasAuthority('GenericUser')" /> <intercept-url pattern="/**" access="permitAll" /> <form-login login-page="/login" login-processing-url="/login" authentication-failure-url="/login" default-target-url="/admin/" password-parameter="password" username-parameter="username" /> <logout delete-cookies="JSESSIONID" logout-success-url="/login" logout-url="/admin/logout" /> <http-basic /> <csrf request-matcher-ref="csrfMatcher"/> </http> <beans:bean id="csrfMatcher" class="org.springframework.security.web.util.matcher.OrRequestMatcher"> <beans:constructor-arg> <util:list value-type="org.springframework.security.web.util.matcher.RequestMatcher"> <beans:bean class="org.springframework.security.web.util.matcher.AntPathRequestMatcher"> <beans:constructor-arg name="pattern" value="/rest/**"/> <beans:constructor-arg name="httpMethod" value="POST"/> </beans:bean> <beans:bean class="org.springframework.security.web.util.matcher.AntPathRequestMatcher"> <beans:constructor-arg name="pattern" value="/rest/**"/> <beans:constructor-arg name="httpMethod" value="PUT"/> </beans:bean> <beans:bean class="org.springframework.security.web.util.matcher.AntPathRequestMatcher"> <beans:constructor-arg name="pattern" value="/rest/**"/> <beans:constructor-arg name="httpMethod" value="DELETE"/> </beans:bean> </util:list> </beans:constructor-arg> </beans:bean> //... </beans:bean>
위의 구성으로 / rest /로 시작하는 모든 URL의 POST | PUT | DELETE 요청에 대해서만 crcf 보안을 사용할 수 있습니다.
-
==============================
4.다음은 XML 구성을 사용하여 URL에 대한 CSRF 확인을 비활성화하는 방법에 대한 잘 수행 된 블로그입니다.
다음은 XML 구성을 사용하여 URL에 대한 CSRF 확인을 비활성화하는 방법에 대한 잘 수행 된 블로그입니다.
http://blogs.sourceallies.com/2014/04/customizing-csrf-protection-in-spring-security/
불행히도 내 버전 인 Spring Security 3.2.8에서는 작동하지 않는 것 같습니다.
-
==============================
5.일시적으로이 간단한 행은 편리 할 수 있습니다.
일시적으로이 간단한 행은 편리 할 수 있습니다.
<http pattern="/home/test**" security="none" />
-
==============================
6.security = "none"을 사용하십시오. 예 : spring-security-config.xml
security = "none"을 사용하십시오. 예 : spring-security-config.xml
<security:intercept-url pattern="/*/verify" security="none" />
from https://stackoverflow.com/questions/22524470/spring-security-3-2-csrf-disable-for-specific-urls by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 런타임시 스프링 <task : scheduled> 객체는 어떻게 표현됩니까? (0) | 2019.01.31 |
---|---|
[SPRING] 프로그래밍 방식으로 스프링 부트 응용 프로그램 다시 시작 / 스프링 컨텍스트 새로 고침 (0) | 2019.01.31 |
[SPRING] 적절한 드라이버가 발견되지 않았습니다. (0) | 2019.01.31 |
[SPRING] 웹 응용 프로그램에 shutDownHook 등록 (0) | 2019.01.30 |
[SPRING] 동일한 데이터베이스 테이블에 두 개의 JPA 또는 Hibernate 엔티티를 매핑하는 방법 (0) | 2019.01.30 |