스프링

http://terasolunaorg.github.io/guideline/5.0.0.RELEASE/en/Security/CSRF.html

 

 

6.7. CSRF 대책 

주의

이 버전은 이미 사용되지 않습니다 . 최신 지침 을 확인 하십시오 .

6.7.1. 개요 

교차 사이트 요청 위조 (Cross-Site Request Forgery, 이하 CSRF)는 사용자가 인증 된 다른 웹 사이트에서 원치 않는 작업을 수행하도록하는 공격입니다.
이것은 대개 스크립트를 실행하거나 자동 전송 (HTTP 리디렉션)을 통해 수행됩니다.
다음은 서버 측 CSRF 공격을 방지하는 방법입니다.
  • 기밀 정보 포함 (토큰)
  • 비밀번호 재 입력
  • 'Refer'체크
OWASP에서 토큰 패턴을 사용하는 방법이 권장 됩니다.
csrf 다른 사이트 확인

그림 - csrf 다른 사이트 확인

노트

OWASP 정보

개방형 웹 응용 프로그램 보안 프로젝트 (OWASP)는 조직에서 신뢰할 수있는 응용 프로그램을 개발하고 유지 관리 할 수 ​​있도록 지원하는 비영리 국제 조직입니다. 보안과 관련한 효과적인 접근 등의 대책을지지한다.

앞서 언급했듯이 CSRF를 피하는 방법은 여러 가지가 있습니다. 그러나 Spring Security는 고정 토큰을 사용하는 라이브러리를 제공합니다.
여기서 하나의 고정 된 토큰이 각 세션에 사용되며 동일한 값이 모든 요청에 ​​사용됩니다.
기본 HTTP 메소드가 GET, HEAD, TRACE 및 OPTIONS 이외의 경우,
요청에 포함 된 CSRF 토큰이 검사되고 값이 일치하지 않으면 오류 (HTTP 상태 : 403 [금지 됨])가 발생합니다.
csrf 다른 종류 검사

그림 - 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.DelegatingAccessDeniedHandlerSpring Security에서 제공하는 Handler의 클래스를 지정하십시오 .
(4)
생성자의 첫 번째 인수를 사용하여 AccessDeniedExceptionMap 형식 의 기본 예외 (상속 예외) 이외의 각 예외 유형을 사용하여 표시를 변경하는 화면을 설정 합니다.
(5)
AccessDeniedException키 에 상속되는 예외를 지정하십시오 .
org.springframework.security.web.access.AccessDeniedHandlerImplSpring Security가 구현 클래스로 제공하도록 지정하십시오 .
속성 이름에 errorPage를 지정하여 값으로 표시 할 뷰를 지정합니다.
(6)
예외 유형이 (5)와 다른 경우 표시 변경을 정의하십시오.
(7)
AccessDeniedException생성자의 AccessDeniedException두 번째 인수를 사용하여 기본보기 (생성자 및의 첫 번째 인수에서 상속 받지 않는 예외 )를 지정합니다.
(8)
org.springframework.security.web.access.AccessDeniedHandlerImplSpring 보안에 의해 제공되는 것을 구현 클래스로 지정하십시오 .
속성 이름에 errorPage를 지정하여 값으로 표시 할 뷰를 지정합니다.
 
상속 된 CSRF 대책으로 인해 예외 유형이 발생했습니다 AccessDeniedException
예외 이유
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 설정 

RequestDataValueProcessorCSRF 토큰 구현 클래스를 사용하면 토큰 을 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의 첫 번째 인수로 설정합니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

spring

 

about author

PHRASE

Level 60  머나먼나라

존대하고 뺨 맞지 않는다 , 남에게 공손하면 욕이 돌아오지 않는다는 말.

댓글 ( 4)

댓글 남기기

작성