カテゴリ: Jakarta EE 更新日: 2026/02/15

Jakarta Server Pages(JSP)のセキュリティ上の注意点を完全解説!初心者でも理解できるXSS対策の基本

Jakarta EE JSPのセキュリティ上の注意点(XSS対策など)
Jakarta EE JSPのセキュリティ上の注意点(XSS対策など)

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

生徒

「Jakarta EEのJSPを使って画面を作れるようになってきたんですが、セキュリティって何を気をつければいいんでしょうか?」

先生

「JSPは画面表示にとても便利ですが、ユーザー入力をそのまま表示すると、思わぬセキュリティ問題が起きることがあります。」

生徒

「入力を表示するだけでも危ないんですか?普通に文字を表示しているだけのつもりでした…」

先生

「その考え方がとても大事です。では、JSPで特に注意したいセキュリティのポイントを順番に見ていきましょう。」

1. JSPにおけるセキュリティ対策が重要な理由

1. JSPにおけるセキュリティ対策が重要な理由
1. JSPにおけるセキュリティ対策が重要な理由

Jakarta Server Pagesは、HTMLの中にJavaの処理結果を埋め込んで画面を生成できる仕組みです。 そのため、フォーム入力やURLパラメータ、データベースの値など、外部から渡ってきたデータを表示する機会が非常に多くなります。 ここで問題になるのが、「そのデータは本当に安全か」という点です。 JSPは画面を作る技術であると同時に、外部と直接つながる入口でもあるため、セキュリティ対策を軽視すると影響が画面にそのまま表れてしまいます。

Webアプリケーションでは、ユーザーが入力した内容をそのまま信用してはいけません。 悪意のあるユーザーは、想定外の文字列やスクリプトを入力し、アプリケーションの動作を乱そうとします。 JSPは表示処理を担うため、セキュリティ対策が不十分だと、画面を通じて攻撃を受ける入り口になりやすいのです。 特に入力内容をそのまま表示する場面が多いJSPでは、この点を意識することが欠かせません。

特に初心者のうちは、「表示するだけだから安全」と思いがちですが、JSPでは表示こそが最大のリスクになる場面も多くあります。 例えば、名前やコメントを表示するだけの画面でも、不正な文字列が混ざると問題が起きる可能性があります。 そのため、JSPの基本構文を覚えるのと同じくらい、セキュリティ上の注意点を理解しておくことが重要です。 まずは「入力を受け取る場所」と「画面に出す場所」が別だという意識を持つだけでも、事故は減らしやすくなります。

Java(Servlet)で受け取った値をJSPへ渡す例


String name = request.getParameter("name");

// 本来はここで入力チェックや必要な加工を行うイメージ
request.setAttribute("name", name);

request.getRequestDispatcher("/name.jsp").forward(request, response);

JSPで表示する例(表示元を意識する)


<p>入力された名前:${name}</p>

このように、画面に出ている文字はJSPの中で突然生まれるわけではなく、JavaのServlet側で受け取った入力が流れてきています。 つまり、入力が危険なら表示も危険になりやすい、というつながりがあります。 JSPで画面を作るときは、「どの値を、どこから受け取り、どこで表示しているか」を追える状態にしておくことが、 セキュリティ対策の第一歩になります。

2. XSSとは何かをJSPの視点で理解する

2. XSSとは何かをJSPの視点で理解する
2. XSSとは何かをJSPの視点で理解する

JSPのセキュリティで必ず押さえておきたいのが、XSSと呼ばれる攻撃です。 XSSは、悪意のあるスクリプトをWebページに埋め込み、そのページを閲覧したユーザーのブラウザ上で JavaScriptなどを実行させてしまう攻撃手法を指します。 JSPではユーザー入力や外部データを画面に表示する機会が多いため、特に注意が必要です。

例えば、フォームやURLパラメータに一見すると普通の文字列に見えるスクリプトが入力された場合でも、 JSPがその値をHTMLとしてそのまま出力すると、ブラウザはそれを命令として解釈してしまいます。 その結果、画面の内容が書き換えられたり、意図しない処理が実行されたりする可能性があります。

Java(Servlet)からJSPへ値を渡すときのイメージ


String comment = request.getParameter("comment");
request.setAttribute("comment", comment);
request.getRequestDispatcher("/comment.jsp").forward(request, response);

JSPでそのまま表示してしまう例


<p>コメント内容:${comment}</p>

このように、JavaのServlet側で受け取った値を何も考えずにJSPで表示すると、 入力内容にスクリプトが含まれていた場合、そのまま実行されてしまう危険があります。 Javaで受け取った時点では問題が見えなくても、「JSPでどう表示されるか」がXSS対策では重要なポイントになります。 JSPはHTMLを生成する技術だからこそ、HTMLやJavaScriptの仕組みとあわせて、 XSSの考え方をしっかり理解しておくことが大切です。

3. JSPでXSSが発生しやすい典型的な書き方

3. JSPでXSSが発生しやすい典型的な書き方
3. JSPでXSSが発生しやすい典型的な書き方

JSPでは、EL式を使って値をそのまま画面に表示できるため、初心者でも直感的に画面を作れるのが特徴です。 しかし、その手軽さが原因で「入力された値をそのまま表示してしまう」書き方が増えやすくなります。 特に、リクエストパラメータやフォーム入力を直接JSPで参照する場合は注意が必要です。

次のように、requestから受け取った値をJSPで直接表示する書き方は、XSSが発生しやすい典型例です。 一見すると普通の表示処理ですが、入力内容の中身によっては危険な画面になってしまいます。


<p>あなたの名前:${param.name}</p>

このコードでは、URLパラメータやフォームから送られてきたnameの値を、そのままHTMLとして出力しています。 もしここにスクリプトのような文字列が含まれていた場合でも、JSPはそれを区別せずに表示してしまいます。 その結果、ブラウザ側でJavaScriptとして解釈される可能性が出てきます。

Java(Servlet)側の処理があっても安心できない例


String name = request.getParameter("name");
request.setAttribute("name", name);
request.getRequestDispatcher("/name.jsp").forward(request, response);

このように、JavaのServletを経由してJSPに値を渡している場合でも、 値の中身を確認せずに表示すれば、危険な状態は変わりません。 「Servletを使っているから安全」「Javaで処理しているから問題ない」と思い込まず、 最終的にJSPでどう表示されるかを必ず意識することが重要です。 JSPでは「表示できること」と「安全に表示できること」は別物だと理解しておきましょう。

4. JSPで行う基本的なXSS対策の考え方

4. JSPで行う基本的なXSS対策の考え方
4. JSPで行う基本的なXSS対策の考え方

JSPでXSS対策を行う際の基本は、「画面に出す前に必ず安全な形に変換する」という考え方です。 HTMLとして意味を持つ記号を、そのまま表示せず、文字として扱うことで、スクリプトの実行を防ぎます。 これを一般的にエスケープ処理と呼びます。

エスケープとは、記号を別の安全な表現に置き換えることです。 例えば、小なり記号や大なり記号は、HTMLのタグとして解釈されない形に変換されます。 JSPでは、この処理を意識的に行わないと、意図せず危険な画面を作ってしまう可能性があります。

JSPの学習では、画面が表示できた時点で満足してしまいがちですが、 「その画面は安全か」という視点を持つことで、より実践的なスキルにつながります。

5. JSTLやELを使った安全な表示の意識

5. JSTLやELを使った安全な表示の意識
5. JSTLやELを使った安全な表示の意識

Jakarta EEのJSPでは、JSTLやELを使った書き方が推奨されています。 これらを使うことで、スクリプトレットを減らし、可読性と安全性を高めることができます。 特に表示処理では、「どこで値が作られ、どこで表示されるのか」を明確にすることが大切です。

値の加工やチェックはServlet側で行い、JSPは表示に専念するという役割分担を意識すると、 セキュリティ上のミスも減らしやすくなります。 JSPを単なるHTMLの延長として扱わず、Webアプリケーションの重要な一部として考えることが重要です。

初心者のうちから、JSPでは「安全に表示する」ことを前提にコードを書く習慣を身につけておくと、 後から大きな修正をせずに済むようになります。

6. JSPセキュリティ対策で覚えておきたい基本姿勢

6. JSPセキュリティ対策で覚えておきたい基本姿勢
6. JSPセキュリティ対策で覚えておきたい基本姿勢

Jakarta EEのJSPでセキュリティを考えるときに大切なのは、「入力は信用しない」「表示前に必ず確認する」という姿勢です。 技術的な対策も重要ですが、それ以上に考え方が重要になります。 JSPは画面を作る技術であると同時に、攻撃の影響が直接ユーザーに見える場所でもあります。

最初から完璧なセキュリティ対策を行う必要はありませんが、 XSSという言葉を知り、JSPで起こりやすい問題を理解しているだけでも、書き方は大きく変わります。 セキュリティを意識したJSPの書き方は、Java Web開発を続けていく上で必ず役に立ちます。

JSPの基本を学ぶ段階だからこそ、セキュリティの考え方も一緒に身につけておくことで、 安心して使えるJakarta EEアプリケーションを作れるようになります。

関連記事:
カテゴリの一覧へ
新着記事
New1
Play Framework
Play Frameworkのフォーム改善ガイド!エラー表示のデザインとUI/UX向上術
New2
Play Framework
Play Frameworkのフォーム処理を徹底解説!エラーメッセージ表示の基本と実践
New3
Play Framework
Play Frameworkのカスタムバリデーション作成を完全ガイド!独自の入力チェックを実装しよう
New4
Play Framework
Play Frameworkの日付・数値入力を徹底解説!初心者でも安心バリデーション
人気記事
No.1
Java&Spring記事人気No1
Jakarta EE
Jakarta EE JSFカスタムコンポーネントとは?初心者向けに基礎から徹底解説【Jakarta Faces・Webアプリ開発】
No.2
Java&Spring記事人気No2
Jakarta EE
Jakarta サーブレットのHttpServletRequestを徹底解説!初心者でもわかる基本操作と使い方
No.3
Java&Spring記事人気No3
Play Framework
Play Frameworkのフォーム処理を完全ガイド!文字数制限と正規表現バリデーション
No.4
Java&Spring記事人気No4
Play Framework
Play Frameworkの日付・数値入力を徹底解説!初心者でも安心バリデーション
No.5
Java&Spring記事人気No5
Jakarta EE
Jakarta EEのJSFマネージドBean入門!Jakarta Facesで学ぶ基本と役割を初心者向けに徹底解説
No.6
Java&Spring記事人気No6
Jakarta EE
Jakarta EEとは?Java EEからの移行の歴史をやさしく解説
No.7
Java&Spring記事人気No7
Play Framework
Play Frameworkのフォーム処理完全ガイド!メールアドレス・電話番号の形式チェック
No.8
Java&Spring記事人気No8
Play Framework
Play FrameworkのForm APIを完全解説!初心者でもわかるフォーム処理の流れ