LoginSignup
44
53

More than 5 years have passed since last update.

超簡単だからやっておこうTomcatの脆弱性対策

Last updated at Posted at 2016-09-20

1.初めに

脆弱性対策として、HTTPレスポンスのヘッダーに
X-Content-Type-Options:nosniff
X-Frame-Options:DENY
X-XSS-Protection:1; mode=block
※各ヘッダーの意味と効果については割愛
を設定するのに、apacheやら.htaccessやらで設定するのが面倒(サーバーが複数台あると大変)ですし、サーバーを引っ越した時に設定を漏らすのも嫌だと思って、warの中に含めてしまう方法は無いかなと思って調べてみたらありましたのでご紹介します。

なお、本機能を使うには
Apache Tomcat 8.0.24以降
Apache Tomcat 7.0.63以降
が必要になりますのでご注意を。

2. web.xmlを設定する

WebContent/WEB-INF/web.xmlに以下の記述を追加するだけ。

  <filter>
    <filter-name>SecurityFilter</filter-name>
    <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>SecurityFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

アプリケーションサーバーを起動してアクセスしてみます。

image

レスポンスにきちんと追加されているのが確認できました(^^)/

3. 応用

なお、web.xmlに追加したfilterをカスタマイズすることでレスポンスヘッダーの内容をカスタマイズすることが出来ます。

■ 特定のヘッダーを無効にする

<init-param>~</init-param>で有効無効が指定できます。

  <filter>
    <filter-name>SecurityFilter</filter-name>
    <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
    <init-param>
      <param-name>antiClickJackingEnabled</param-name>
      <param-value>false</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>SecurityFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

結果

image

クリックジャッキング対策の「X-Frame-Options:DENY」が消えました。

<param-name>に設定する名前は以下URLを参考にすればなんとなく分かると思いますが、
https://tomcat.apache.org/tomcat-8.0-doc/api/org/apache/catalina/filters/HttpHeaderSecurityFilter.html

  • antiClickJackingEnabled → X-Frame-Options:DENY
  • blockContentTypeSniffingEnabled → X-Content-Type-Options:nosniff
  • xssProtectionEnabled → X-XSS-Protection:1; mode=block

にそれぞれ対応するはずです(全部は試していない)。

■ ヘッダーのパラメータをカスタマイズする

例えば
X-Frame-Options:DENY

X-Frame-Options:SAMEORIGIN
に変えたいとき。
<init-param>~</init-param>でオプションが指定できます。

  <filter>
    <filter-name>SecurityFilter</filter-name>
    <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
    <init-param>
      <param-name>antiClickJackingOption</param-name>
      <param-value>SAMEORIGIN</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>SecurityFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

結果

image

X-Frame-Options:SAMEORIGINが確認できました。

以上です。
<url-pattern>を工夫すれば特定のURLや拡張子のみにフィルターをかけることも可能です。色々お試しください(^^)/

44
53
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
44
53