http://terasolunaorg.github.io/guideline/5.0.0.RELEASE/en/Security/CSRF.html
6.7. CSRF 대책
목차
6.7.1. 개요
- 기밀 정보 포함 (토큰)
- 비밀번호 재 입력
- 'Refer'체크
노트
OWASP 정보
개방형 웹 응용 프로그램 보안 프로젝트 (OWASP)는 조직에서 신뢰할 수있는 응용 프로그램을 개발하고 유지 관리 할 수 있도록 지원하는 비영리 국제 조직입니다. 보안과 관련한 효과적인 접근 등의 대책을지지한다.
그림 - csrf 다른 종류 검사
팁
CSRF 토큰 검사는 다른 사이트의 잘못된 업데이트 요청을 확인하고 오류를 throw하는 검사입니다. 주문 (비즈니스 플로우 시리즈)을 확인하고 시행하도록하려면 트랜잭션 토큰 확인을 참조 하십시오 .
6.7.2. 사용법
6.7.2.1. 스프링 보안 설정
여기서는 Spring Security에서 제공하는 CSRF 기능을 사용하기위한 설정을 설명합니다. Spring Security의 How to use를 사용 하여 구성된 web.xml 사용을 가정합니다.
6.7.2.1.1. spring-security.xml 설정
추가 설정이 필요한 위치가 강조 표시됩니다.
추가 설정이 필요한 위치가 강조 표시됩니다.
<sec:http auto-config="true" use-expressions="true" >
<!-- omitted -->
<sec:csrf /> <!-- (1) -->
<sec:access-denied-handler ref="accessDeniedHandler"/> <!-- (2) -->
<!-- omitted -->
</sec:http>
<bean id="accessDeniedHandler"
class="org.springframework.security.web.access.DelegatingAccessDeniedHandler"> <!-- (3) -->
<constructor-arg index="0"> <!-- (4) -->
<map>
<entry
key="org.springframework.security.web.csrf.InvalidCsrfTokenException"> <!-- (5) -->
<bean
class="org.springframework.security.web.access.AccessDeniedHandlerImpl"> <!-- (5) -->
<property name="errorPage"
value="/WEB-INF/views/common/error/invalidCsrfTokenError.jsp" /> <!-- (5) -->
</bean>
</entry>
<entry
key="org.springframework.security.web.csrf.MissingCsrfTokenException"> <!-- (6) -->
<bean
class="org.springframework.security.web.access.AccessDeniedHandlerImpl"> <!-- (6) -->
<property name="errorPage"
value="/WEB-INF/views/common/error/missingCsrfTokenError.jsp" /> <!-- (6) -->
</bean>
</entry>
</map>
</constructor-arg>
<constructor-arg index="1"> <!-- (7) -->
<bean
class="org.springframework.security.web.access.AccessDeniedHandlerImpl"> <!-- (8) -->
<property name="errorPage"
value="/WEB-INF/views/common/error/accessDeniedError.jsp" /> <!-- (8) -->
</bean>
</constructor-arg>
</bean>
Sr. | 기술 |
---|---|
(1)
|
Spring Security의 CSRF 토큰 검사 기능은 요소를 요소 로 정의하여 사용할 수 있습니다 .
기본적으로 선택되는 HTTP 메소드의 경우 여기 를 참조하십시오 .
자세한 내용은 스프링 보안 참조 문서 를 참조하십시오 .
|
(2)
|
예외 상속
AccessDeniedException 이 발생할 때 예외의 각 유형에 따라 표시되도록보기를 변경하는 처리기를 정의하십시오 .속성에 대상 jsp를
error-page 지정 하여 동일한 화면에 모든 예외를 표시 할 수 있습니다.Spring Security 기능에 의해 예외가 처리되지 않는 경우 여기 를 참고하십시오 .
|
(삼)
|
오류 페이지를 변경하려면
org.springframework.security.web.access.DelegatingAccessDeniedHandler Spring Security에서 제공하는 Handler의 클래스를 지정하십시오 . |
(4)
|
생성자의 첫 번째 인수를 사용하여
AccessDeniedException Map 형식 의 기본 예외 (상속 예외) 이외의 각 예외 유형을 사용하여 표시를 변경하는 화면을 설정 합니다. |
(5)
|
AccessDeniedException 키 에 상속되는 예외를 지정하십시오 .org.springframework.security.web.access.AccessDeniedHandlerImpl Spring Security가 구현 클래스로 제공하도록 지정하십시오 .속성 이름에 errorPage를 지정하여 값으로 표시 할 뷰를 지정합니다.
|
(6)
|
예외 유형이 (5)와 다른 경우 표시 변경을 정의하십시오.
|
(7)
|
AccessDeniedException 생성자의 AccessDeniedException 두 번째 인수를 사용하여 기본보기 (생성자 및의 첫 번째 인수에서 상속 받지 않는 예외 )를 지정합니다. |
(8)
|
org.springframework.security.web.access.AccessDeniedHandlerImpl Spring 보안에 의해 제공되는 것을 구현 클래스로 지정하십시오 .속성 이름에 errorPage를 지정하여 값으로 표시 할 뷰를 지정합니다.
|
예외 | 이유 |
---|---|
org.springframework.security.web.csrf.
InvalidCsrfTokenException
|
클라이언트에서 요청한 CSRF 토큰이 서버 측에 저장된 CSRF 토큰과 일치하지 않을 때 발생합니다.
|
org.springframework.security.web.csrf.
MissingCsrfTokenException
|
CSRF 토큰이 서버 측에 존재하지 않을 때 발생합니다.
기본 설정에 따라 토큰이 HTTP 세션에 저장되므로 CSRF 토큰을 갖지 않으면 HTTP 세션이 삭제된다는 것을 의미합니다 (세션 시간 초과).
MissingCsrfTokenException 요소의 token-repository-ref 속성을 사용하여 CSRF 토큰의 저장 위치가 서버 또는 DB로 변경되고 CSRF 토큰이 저장 위치에서 삭제 될 때 발생합니다.토큰이 HTTP 세션에 저장되어 있지 않으면이 기능을 사용하여 세션 시간 초과를 감지 할 수 없음을 의미합니다.
|
노트
HTTP 세션을 CSRF 토큰의 저장 위치로 사용할 경우 CSRF 토큰 검사 요청에 대해 세션 시간 초과를 감지 할 수 있습니다.
세션 타임 아웃을 검출 한 후의 invalid-session-url
동작은 엘리먼트 의 속성의 사양에 따라 다릅니다 .
- 때
invalid-session-url
속성이 지정되어, 그것은에 지정된 경로로 재invalid-session-url
세션이 작성되면. - 경우
invalid-session-url
속성을 지정하지 않고, 그것의 정의에 따른 처리org.springframework.security.web.access.AccessDeniedHandler
에 지정된 소자.
CSRF 토큰 검사에 속하지 않는 요청에 대해 세션 시간 초과를 감지해야하는 invalid-session-url
경우 요소의 속성을 지정하여 감지하는 것이 좋습니다 . 자세한 내용은 " 세션 시간 초과 감지 "를 참조하십시오 .
노트
설정을 생략했을 때의 오류 처리
web.xml에서 다음 설정을 수행하여 페이지로 이동할 수 있습니다.
web.xml
<error-page> <error-code>403</error-code> <!-- (1) --> <location>/WEB-INF/views/common/error/accessDeniedError.jsp</location> <!-- (2) --> </error-page>
Sr. 기술 (1) 오류 코드 요소에 상태 코드 403을 설정하십시오. (2) 위치 요소에 전환 경로를 설정합니다.
노트
403 이외의 상태 코드가 반환 될 때
요청의 CSRF 토큰이 일치하지 않을 때 403 이외의 상태 코드가 반환되면 인터페이스를 구현하는 독립적 인 AccessDeniedHandler를 만들어야 org.springframework.security.web.access.AccessDeniedHandler
합니다.
6.7.2.1.2. spring-mvc.xml 설정
RequestDataValueProcessor
CSRF 토큰 구현 클래스를 사용하면 토큰 을 Spring 태그 라이브러리의 태그를 사용하여 'hidden'필드로 자동 삽입 할 수있다 .
<bean id="requestDataValueProcessor"
class="org.terasoluna.gfw.web.mvc.support.CompositeRequestDataValueProcessor"> <!-- (1) -->
<constructor-arg>
<util:list>
<bean
class="org.springframework.security.web.servlet.support.csrf.CsrfRequestDataValueProcessor" /> <!-- (2) -->
<bean
class="org.terasoluna.gfw.web.token.transaction.TransactionTokenRequestDataValueProcessor" />
</util:list>
</constructor-arg>
</bean>
Sr. | 기술 |
---|---|
(1)
|
대한 빈 정의를 수행
org.terasoluna.gfw.web.mvc.support.CompositeRequestDataValueProcessor 하는 여러에 대한org.terasoluna.gfw.web.mvc.support.RequestDataValueProcessor 정의 할 수 있습니다. |
(2)
|
Bean 정의를 생성자
org.springframework.security.web.servlet.support.csrf.CsrfRequestDataValueProcessor 의 첫 번째 인수로 설정합니다. |
댓글 ( 4)
댓글 남기기