カテゴリ: Jakarta EE 更新日: 2025/12/13

JakartaEEフィルタで実現するセキュリティ対策|XSSとCSRFを防ぐ方法

Jakarta EE セキュリティ対策に使えるフィルタ(XSS, CSRF対応)
Jakarta EE セキュリティ対策に使えるフィルタ(XSS, CSRF対応)

先生と生徒の会話形式で理解しよう

生徒

「先生、JakartaEEでウェブアプリを作っているのですが、セキュリティ対策ってどうすればいいんですか?」

先生

「とても大事な視点ですね。JakartaEEではServletフィルタを使って、XSS対策やCSRF対策を実装できますよ。」

生徒

「フィルタってリクエストやレスポンスを処理する仕組みですよね?どうやってセキュリティと関係するんですか?」

先生

「そうです。フィルタを通してリクエストのパラメータをチェックしたり、トークンを検証することで、不正なアクセスを防ぐことができます。」

1. JakartaEEにおけるセキュリティ対策とフィルタの役割

1. JakartaEEにおけるセキュリティ対策とフィルタの役割
1. JakartaEEにおけるセキュリティ対策とフィルタの役割

JakartaEEのウェブアプリケーションでは、セキュリティ対策が欠かせません。特に外部からの攻撃としてよく知られているのがクロスサイトスクリプティング(XSS)とクロスサイトリクエストフォージェリ(CSRF)です。これらはユーザーのデータやセッションを狙う代表的な攻撃であり、初心者が作るシンプルなアプリでも簡単に標的になってしまいます。

Jakarta Servletのフィルタを利用することで、これらの攻撃を効率的に防止できます。フィルタはすべてのリクエストやレスポンスの入り口に立つ仕組みであり、チェックや加工を追加できるため、セキュリティ対策に非常に有効です。

2. フィルタを利用したXSS対策の基本

2. フィルタを利用したXSS対策の基本
2. フィルタを利用したXSS対策の基本

XSS攻撃はユーザー入力に悪意あるスクリプトを仕込み、それを他のユーザーに実行させることで情報を盗んだり画面を改ざんする攻撃です。例えば、コメント欄や検索フォームにスクリプトを埋め込まれると、レスポンス時にそのまま表示されてしまう危険があります。

フィルタを使えば、リクエストパラメータをサニタイズ(無害化)する処理を一括で行えます。例えば、<script>タグを検出してエスケープしたり、特定の危険な文字列を削除するといった方法です。


@WebFilter("/*")
public class XSSFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
        throws IOException, ServletException {
        XSSRequestWrapper wrappedRequest = new XSSRequestWrapper((HttpServletRequest) request);
        chain.doFilter(wrappedRequest, response);
    }
}

この例ではリクエストをラップして入力値をサニタイズします。こうすることで全てのリクエストに対して一貫したXSS対策を適用できます。

3. フィルタを利用したCSRF対策の基本

3. フィルタを利用したCSRF対策の基本
3. フィルタを利用したCSRF対策の基本

CSRF攻撃は、ユーザーが意図しないリクエストを外部サイトから送らされることで、アカウント操作や重要な処理が不正に実行される攻撃です。例えばログイン中の銀行アプリに不正送金リクエストを送られてしまう危険性があります。

これを防ぐ代表的な方法はトークン方式です。フォーム送信時にCSRFトークンを埋め込み、サーバー側フィルタでトークンを検証します。


@WebFilter("/*")
public class CSRFTokenFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
        throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        if ("POST".equalsIgnoreCase(req.getMethod())) {
            String token = req.getParameter("csrfToken");
            String sessionToken = (String) req.getSession().getAttribute("csrfToken");
            if (token == null || !token.equals(sessionToken)) {
                throw new ServletException("CSRF攻撃が検出されました");
            }
        }
        chain.doFilter(request, response);
    }
}

このようにフィルタでトークンを検証すれば、外部からの不正リクエストを効果的にブロックできます。

4. XSSとCSRF対策を組み合わせたセキュリティ強化

4. XSSとCSRF対策を組み合わせたセキュリティ強化
4. XSSとCSRF対策を組み合わせたセキュリティ強化

現実的なアプリケーション開発では、XSSとCSRFの両方に同時に備える必要があります。フィルタは複数チェーンとして組み合わせられるため、まず入力をサニタイズするフィルタを適用し、その後にCSRFトークンを検証するフィルタを追加するという流れを構築できます。

また、セキュリティヘッダーの追加もフィルタで実装可能です。例えば、X-Frame-OptionsContent-Security-Policyをレスポンスに付与することでクリックジャッキングやスクリプト注入のリスクをさらに軽減できます。

5. 初心者が意識すべきJakartaEEセキュリティのポイント

5. 初心者が意識すべきJakartaEEセキュリティのポイント
5. 初心者が意識すべきJakartaEEセキュリティのポイント

初心者がJakartaEEでアプリを作るとき、つい見落としがちなのがセキュリティ対策です。入力チェックをコントローラごとに書くのは効率が悪く、抜け漏れも発生します。そこでServletフィルタを活用すれば、一箇所で共通処理を管理でき、堅牢で安全なアプリケーションを作れます。

さらに、JakartaEEのフィルタは拡張性が高いため、ログ出力、認証チェック、レスポンス圧縮などにも応用できます。そのため、セキュリティだけでなくパフォーマンスや保守性の向上にもつながります。

関連記事:
カテゴリの一覧へ
新着記事
New1
Play Framework
Play Frameworkでフォームデータをコントローラで扱う方法を完全解説|Java初心者向けコントローラ入門
New2
Jakarta EE
Jakarta EE JSPにおけるJSTLとスクリプトレットの違いと使い分けを初心者向けに徹底解説
New3
Play Framework
Play Frameworkでクエリパラメータをコントローラで処理する方法を完全解説|Java初心者向け入門
New4
Play Framework
Play FrameworkとSpring Bootの違いを徹底比較!初心者でもわかるJavaフレームワーク入門
人気記事
No.1
Java&Spring記事人気No1
Jakarta EE
Jakarta EEのリリースサイクルとバージョンの進化をやさしく解説!
No.2
Java&Spring記事人気No2
Jakarta EE
Jakarta サーブレットのHttpServletRequestを徹底解説!初心者でもわかる基本操作と使い方
No.3
Java&Spring記事人気No3
Jakarta EE
Jakarta EEとSpringの比較|どちらを選ぶべきか?初心者向けに徹底解説!
No.4
Java&Spring記事人気No4
Jakarta EE
Jakarta EEとJava EEアプリの互換性を完全解説!移行で困らないための基礎知識
No.5
Java&Spring記事人気No5
Jakarta EE
Jakarta EE JSPでJSTL SQLタグを使った簡易データベースアクセスをやさしく解説
No.6
Java&Spring記事人気No6
Jakarta EE
Jakarta EE JSPにおけるJSTL国際化タグ(fmt:message)の使い方を初心者向けに完全解説
No.7
Java&Spring記事人気No7
Jakarta EE
Jakarta EE JSPでJSTLを使ったJSONやREST APIレスポンス処理を初心者向けにやさしく解説
No.8
Java&Spring記事人気No8
Play Framework
Play Frameworkでリクエストデータの受け取り方を完全解説|Java初心者向けコントローラ入門