[java] Tomcat의 클릭재킹(Clickjacking) 방어 기법

클릭재킹(Clickjacking)은 사용자의 클릭이 의도하지 않은 동작을 수행할 수 있도록 만드는 웹 어플리케이션의 보안 취약점입니다. 이를 방어하기 위해 Tomcat 서버에서 몇 가지 기법을 사용할 수 있습니다.

X-Frame-Options 헤더 설정하기

X-Frame-Options는 클릭재킹을 방지하기 위해 도입된 보안 헤더입니다. 이 헤더를 사용하면 웹페이지가 다른 사이트에서 넣은 <iframe>에 로드되는 것을 방지할 수 있습니다.

Tomcat에서는 web.xml 파일에 아래와 같이 X-Frame-Options 헤더를 추가하여 클릭재킹을 방어할 수 있습니다.

<web-app>
  <filter>
    <filter-name>XFrameOptionsFilter</filter-name>
    <filter-class>org.apache.catalina.filters.XFrameOptionsFilter</filter-class>
    <init-param>
      <param-name>deny</param-name>
      <param-value>Deny</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>XFrameOptionsFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

위의 예제에서는 XFrameOptionsFilter를 등록하고 deny 값을 설정하여 모든 <iframe> 요청을 거부하도록 했습니다.

Content-Security-Policy 헤더 설정하기

Content-Security-Policy는 브라우저에게 특정한 내용을 로드하도록 허용하는 정책을 지정하는 보안 헤더입니다. 이를 사용하면 클릭재킹을 방어할 수 있습니다.

Tomcat에서는 아래와 같이 web.xml 파일에 Content-Security-Policy 헤더를 추가하여 클릭재킹을 방어할 수 있습니다.

<web-app>
  <filter>
    <filter-name>ContentSecurityPolicyFilter</filter-name>
    <filter-class>org.apache.catalina.filters.ContentSecurityPolicyFilter</filter-class>
    <init-param>
      <param-name>policy</param-name>
      <param-value>frame-ancestors 'none';</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>ContentSecurityPolicyFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

위의 예제에서는 ContentSecurityPolicyFilter를 등록하고 frame-ancestors 값을 'none'으로 설정하여 모든 <iframe> 요청을 거부하도록 했습니다.

참고 자료