웹 UI 프레임워크 보안 - CSRF 공격에 대한 보호
웹 UI 프레임워크에서 이 프로시저를 사용하여 CSRF 공격으로부터 보호하십시오.
프로시저
- web.xml 파일을 여십시오.
- CSRF 공격을 방어하는 데 사용되는 토큰의
유효성을 검증하려면 애플리케이션에서 등록될
요청 유효성 검증기를 생성하십시오(유효성
검증기가 아직 web.xml 파일에 없는 경우).
예:
<context-param> <param-name>scui-request-validator-10</param-name> <param-value> com.sterlingcommerce.ui.web.platform.security.SCUICSRFTokenValidator </param-value> </context-param> - 유효성 검증기가 실행될 수 있는 모드를 설정하십시오.
- ALL - CSRF 토큰에 대해 POST 및 GET 요청을 모두 유효성 검증합니다.
- POST(기본값) - CSRF 토큰에 대해 POST 요청만 유효성 검증합니다.
- NONE - 유효성 검증기가 CSRF 토큰에 대한 요청의 유효성을 검증하지 않습니다.
config.xml 파일 또는 web.xml 파일의 컨텍스트 파라미터에서 유효성 검증기 모드를 지정할 수 있습니다(유효성 검증기 모드가 아직 web.xml 파일에 없는 경우).
모드가 지정되지 않거나 유효성 검증 모드에 대해 컨텍스트 파라미터가 지정되지 않은 경우 모드는 기본적으로 POST로 설정됩니다. IBM® 은 요청의 유효성을 검증하기 위해 POST 모드를 사용하도록 권장합니다.
예:
<context-param> <param-name>scui-csrf-validator-request-method</param-name> <param-value>ALL</param-value> </context-param> - 필요한 경우, 다음 가이드라인을 사용하여 검증기의
URI(Universal Resource Indicator) 포함 및 제외 목록을
설정하십시오.
- URI가 제외 목록에 있는 경우에는 CSRF 토큰에 대해 유효성을 검증하지 않습니다.
- URI가 포함 목록에 있고 제외 목록에 없는 경우 CSRF 토큰에 대해 유효성 검증됩니다.
web.xml 파일에서 다음 컨텍스트 파라미터를 사용하면 포함 및 제외 목록을 생성할 수 있습니다. 파라미터는 그 수에 관계 없이 제공할 수 있습니다.- csrf-include-uri
값과 동일한 URI를 포함하는 요청은 CSRF 토큰에 대한 유효성을 검증합니다.
예(web.xml의 경우):
<context-param> <param-name>csrf.include.uri.endswith.stk.1</param-name> <param-value>.do</param-value> </context-param> - csrf-include-uri-endswith
값으로 끝나는 URI를 포함하는 요청은 CSRF 토큰에 대한 유효성을 검증합니다.
예(web.xml의 경우):
<context-param> <param-name>csrf.include.uri.endswith.stk.2</param-name> <param-value>.xml</param-value> </context-param> - csrf-include-uri-regex
regex(파라미터의 값으로 제공됨)와 일치하는 URI를 포함하는 요청은 CSRF 토큰에 대한 유효성을 검증합니다.
예(web.xml의 경우):
<context-param> <param-name>csrf.include.uri.stk.1</param-name> <param-value>/stk/home.jsp</param-value> </context-param> - csrf-bypass-uri
값과 일치하는 URI를 포함하는 요청은 무시하고 CSRF 토큰을 확인하지 않습니다.
예(web.xml의 경우):
<context-param> <param-name>csrf.bypass.uri.stk.1</param-name> <param-value>/console/login.jsp</param-value> </context-param> - csrf-bypass-uri-endswith
값으로 끝나는 URI를 포함하는 요청은 무시합니다.
예(web.xml의 경우):
<context-param> <param-name>csrf.bypass.uri.endswith.stk.1</param-name> <param-value>.js</param-value> </context-param> - csrf-bypass-uri-regex
regex(파라미터의 값으로 제공됨)와 일치하는 URI를 포함하는 요청은 CSRF 토큰을 확인하지 않습니다.
예(web.xml의 경우):
<context-param> <param-name>csrf.bypass.uri.regex.stk.1</param-name> <param-value>[a-zA-Z0-0]*servlet/param-value> </context-param>
csrf-include 파라미터가 제공되지 않더라도 기본적으로 모든 URI는 포함 목록에 있습니다. URI가 제외 목록에 있음을 명시적으로 지정해야 합니다. 포함 목록이 제공되지 않으면 기본적으로 모든 URI가 포함 목록에 있는 것으로 간주됩니다. 애플리케이션이 포함 목록에 특정 URI를 추가하여 CSRF 토큰에 대한 모든 URI의 유효성 검증을 방지할 수 있습니다.
기본적으로 프레임워크는 gif, png, css 또는 js-type 파일 요청에 대한 CSRF 유효성 검증을 무시하기 위한 제외 목록을 제공합니다.
- 대부분의 CSRF 공격은 POST 요청을 해당 GET에
복제해야 실행됩니다. 대부분의 애플리케이션은 POST 요청과
GET 요청을 구분하지 않으므로 일반적으로 공격이 실행됩니다. GET 요청과 POST 요청을 구분하려면 Struts 액션 정의에서
액션의 requestMethodSupported 파라미터를 사용하여
유효성 검증기를 실행할 수 있는 모드를 설정하십시오.
- POST - (기본값) POST 요청만 허용됩니다.
requestMethodSupported가 설정되지 않거나 알 수 없는 값인 경우 기본값은 POST입니다.
- ALL - GET 및 POST 요청이 모두 허용됩니다.
예:
<action name="accountTransfer" class="com.AccountTransfer"> <param name="requestMethodSupported">POST</param> <param name="resourceId">AccountTransfer_Action002</param> </action> - POST - (기본값) POST 요청만 허용됩니다.