Tomcatで独自のエラーページを使うJavaTips 〜アプリケーションサーバ/コンテナ活用編

» 2004年07月13日 10時00分 公開
[佐藤匡剛@IT]

 Tomcatは、存在しないURLへのリクエストがあったとき、認証に失敗したときやサーブレットにエラーがあったときなど、HTTPのエラー発生時には以下のようなエラーページを表示します。

Tomcatのデフォルトエラーページ Tomcatのデフォルトエラーページ

 しかし、このエラーページはセキュリティ的に問題となることがあります。使用しているTomcatのバージョンがエラーページのフッタに表示されるからです。エラーページの表示から、脆弱性のあるバージョンを使用していることを知られ、攻撃対象にされてしまう危険があります。もちろん、メンテナンスが万全で、脆弱性が発見されるたびに最新バージョンにアップデートしているシステムなら、バージョンが表示されても問題はありませんが、現実はなかなかそういかないでしょう。

 このような危険を防ぐために、エラーページを自前で用意したものに置き換え、セキュリティの向上を図るべきです。Tomcatでは、Apacheと同様にエラーコードに応じて独自のエラーページを指定することが可能です。また、独自のエラーページを用意しておくことで、エラーページも含めたWebアプリケーション全体の外観を統一できるという利点もあります。

独自のエラーページを指定する方法

 独自のエラーページを使用するには、サーブレットのデプロイメントディスクリプタ(web.xml)の修正が必要です。以下では、「指定したページが見つからない」ことを意味する404エラーコードに対して、Webアプリケーションのルート配下にある「/error/404.html」というページが表示されるようにします。赤字部分が、追加すべき記述です。

デプロイメント・ディスクリプタ(web.xml)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
  ...中略...
  <error-page>
    <error-code>404</error-code>
    <location>/error/404.html</location>
  </error-page>

</web-app>


 デプロイメントディスクリプタの変更には、Tomcat全体の設定ファイル「%CATALINA_HOME%\conf\web.xml」を変更する方法と、それぞれのWebアプリケーション配下にある「WEB-INF\web.xml」を変更する方法の2つがあります。

 セキュリティ上の理由で独自のエラーページを使う場合は、全体の設定ファイルとなる「%CATALINA_HOME%\conf\web.xml」に記述します。各Webアプリケーションのweb.xmlに記述した場合、それ以外のURLのリクエストにはデフォルトのエラーページを表示してしまうからです。逆に、Webアプリケーションの外観の統一が理由なら、各Webアプリケーションのweb.xmlに記述しておくことで、アプリケーションごとの外観に合わせたエラーページを表示させることができます。

最低限用意すべきエラーページ

 HTTPステータスコードでは、 400番台と500番台がエラーコードとして定義されています。エラーコードだけでもかなりの数があるため、それらのすべてについて、独自のページを用意するのは容易ではありません。また、その多くはほとんど目にする機会のないものです。したがって、頻繁に表示される可能性のある、以下のエラーコードだけを用意しておけば実用上は問題ないでしょう。

頻繁に表示される主なエラーコード
コード番号 意味
401 認証に失敗した
403 指定したページへのアクセス権限がない
404 指定したページが見つからない
500 サーブレットやCGIなど、サーバ内部に問題があってページを表示できない

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。