提供された6つの主要なサーバーサイドコンポーネント(efwServlet.java、efw.server.js、uploadServlet.java、previewServlet.java、downloadServlet.javaとefwFilter.java)を統合し、Efwフレームワークのセキュリティ機構を「efwのセキュリティのまとめ」として分析します。
Efwフレームワークは、画面アクセス、イベント実行、およびファイルI/Oの各レイヤーで多重かつ具体的なセキュリティチェックを組み込むことで、堅牢なエンタープライズアプリケーション環境を提供しています。
🛡️ Efwフレームワークのセキュリティ機構
1. 画面アクセス制御層 (efwFilter.java)
efwFilter は、すべての重要なリソース(JSP、各種サーブレット)に対するリクエストを捕捉する最前線のセキュリティゲートウェイです。
- JSPアクセス制御: JSPページへの直接アクセスに対して、ログイン状態と認可をJavaレベルでチェックします。
- ログインチェック: 認証が必要なJSPへのアクセス時、セッションにログインキーが存在しない場合、
loginUrlへ強制リダイレクトし、未認証アクセスを阻止します。 - JSP認可チェック: ログイン後も、ユーザー権限(
authPattern)とアクセス対象URL(urlPattern)が一致しない場合、systemErrorUrlへ強制リダイレクトし、権限のない画面への遷移を防ぎます。
- ログインチェック: 認証が必要なJSPへのアクセス時、セッションにログインキーが存在しない場合、
- イベントエンドポイントのパススルー:
/efwServletやファイルI/Oサーブレットなどのエンドポイントはフィルターを通過しますが、リダイレクトチェックは行わず、各サーブレットまたはJS層に認証・認可を委譲します。
2. イベント実行・認証認可層 (efw.server.js)
イベント実行(AJAXリクエスト)のパイプラインは、サーバーサイドJavaScript内の専用ロジックで保護されています。
- ログインチェック (
checkLogin): セッションタイムアウトを検知し、クライアントにアラート表示とloginUrlへのナビゲーションを指示します。 - 認可チェック (
checkAuth): 実行されるeventIdとセッションのユーザー権限を照合し、権限のない機能の実行を阻止します。 - 暗号化されたデータの復号化: パラメーターに
secure:trueが設定されている場合、サーバー側で Base64 デコードを行い、通信中のデータ機密性を担保します。
3. データ品質・検証層 (efw.server.js)
ビジネスロジック実行前に、入力データに対する厳格な品質チェックとサニタイズ(浄化)を実行します。
- サーバーサイドバリデーション (
checkStyle):- 型安全性:
formatに基づき、データ(日付、数値など)の形式を検証し、安全なデータ型に変換してロジック層に渡します。 - 範囲/長さチェック:
min/maxやmax-lengthを強制します。 - 禁則文字対応: 設定に基づき、入力値に含まれる危険な文字や特殊文字を置換/削除し、データインジェクションのリスクを低減します。
- 型安全性:
4. ファイルI/O制御層 (専用サーブレット)
ファイル処理はリスクが高いため、専用のサーブレット内でJavaによる具体的なセキュリティ措置が実行されます。
A. ファイルアップロード (uploadServlet.java)
アップロードの最初期段階で、多層的なアクセス制御とリスク回避を行います。
- アップロード特権の強制:
efwFilterを通過した後も、uploadServletはuploadable=trueの権限を持つユーザーからのみファイルを受け付けます。 - ディレクトリトラバーサル防止: ファイル名やアップロードパスに
..(親ディレクトリへの遡り)や、不正なパス文字が含まれていないかを厳しくチェックし、ファイルシステムへの不正アクセスを防止します。 - 一時ファイル管理: ファイルはまず安全な一時領域に保存され、永続化のロジック(
elfinder_upload.js)に渡されます。
B. ファイル提供制御 (previewServlet.java, downloadServlet.java)
ファイルの読み出しに際し、ファイルパスの漏洩を防ぐ機構を採用しています。
- セッション経由のパス秘匿: ファイルパスはURLパラメーターではなく、HTTPセッションを介して渡されます。これにより、パスを推測されるリスクを大幅に低減しています。
- 属性の即時削除: ファイル情報(ファイルパス、オプション)は、サーブレットが取得した後、セッションから直ちに削除されます。
- リソース制限 (
previewServlet): プレビュー時にはファイルサイズを 10MBに制限し、サービス拒否(DoS)攻撃やサーバー負荷増大を防ぎます。 - リソースクリーンアップ (
downloadServlet): ダウンロード完了後、生成された一時ZIPファイルや、オプション設定されたソースファイルが確実に削除されます。
統合的なセキュリティ戦略
Efwフレームワークのセキュリティ戦略は、以下の3つの原則に基づいています。
- 多層防御: 画面、イベント、データ、ファイルI/Oの各層に独立したチェックポイントを設ける。
- 権限委譲: 低リスクな制御はJavaScriptに任せ、高リスクな制御(JSPアクセス、ファイルI/O、パスチェック)は Java サーブレットに任せる。
- セッション利用: 機密性の高い情報(ファイルパス、ログイン状態)の受け渡しは、URLではなく安全性の高いセッションを介して行う。