セキュリティ対策

1. セキュリティ対策について

セキュリティ対策を行うにあたって、項目ごとにiPLAssでの対策・またその適用方法を以下に一覧にて示しますので、それを参考に対策を実施してください。
対策項目の引用元は独立行政法人 情報処理推進機構様の 「安全なウェブサイトの作り方 改訂第7版」 になります。

1.1. SQLインジェクション対策

iPLAssではデータ操作する際には EntityManager クラス経由で行います。
EntityManager クラス経由でアプリケーションロジックからSQLを直接発行することはできません。 データを検索する際にはSQLライクの言語であるEQLを利用します。
直接SQLを発行はしないですが、SQLライクのEQLに対しては同様のインジェクション対策を検討する必要があります。
EQLを実行する方法として、 2つの方式 が存在します。EQLを文字列として作成し実行する方式 、もしくはEQLを表現するクラス群を用いて実行する方式です。

EQLを文字列して作成し実行する方式

通常のSQL文を文字列として構築する際と同様に サニタイズ処理 が必要です。 サニタイズを行う場合は次のユーティリティが利用可能です。

  • PreparedQuery(GroovyTemplate) におけるエスケープ書式の活用
    詳しくはGroovyTemplateのエスケープ処理付Expressionを参照ください。

  • 文字列操作ユーティリティクラスで用意されている StringUtil クラスの escapeEql()escapeEqlForLike() の活用
    詳しくはjavadocを参照ください。

EQLを表現するクラス群を用いて実行する方式

条件式等はインジェクションされることはないので、こちらの利用を推奨します。 ただし入力パラメータが想定されたものかどうかは個々のケースに合わせチェックが必要になります。
特に Like に関しては % などが自動でサニタイズされないケースがありますので注意が必要になります。
詳しくはLike条件文を参照ください。

1.2. OSコマンド・インジェクション対策

iPLAssにおいて外部の入力値からOSコマンドを実行する仕組みは提供されていません。

1.3. パス名パラメータの未チェック/ディレクトリ・トラバーサル

iPLAssで提供されるファイルアップロード機能ではAPサーバにテンポラリ領域にファイルとして展開された後にウィルスチェック処理(設定済みの場合)が実行され、問題がないと判断されたファイルが、LOB格納領域(ファイルやDBなど) に格納されます。
ファイルを作成する際のファイル名はランダムに生成したファイル名が使用され、また LOB格納領域 がファイル形式の場合でも特定のディレクトリ配下からしかファイル取得できないように実装されており、ディレクトリトラバーサルされることはありません。

1.4. セッション管理の不備

iPLAssでは Java EE/Jakarta EE のHttpSessionベースでセッションを管理しています。 HttpSession利用前提での対策を実施してください。
iPLAssが提供するログイン処理ではセッション固定攻撃対策は実施済みです。

(参考)セッションのレースコンディションに対する対策

セッション管理の不備に関連する項目として、セッションのレースコンディションに関する対策について以下に説明します。
Commandのインスタンスはデフォルトの設定では、Servletと同様に複数のリクエストから共有されるため、ユーザ情報などセッションに紐づく情報をメンバ変数として保持しないでください。 Commandにてセッション情報を扱う際には、SessionContext を利用します。

詳しくはSessionContextを参照ください。

Action/カスタムWebApiにおいてレースコンディションを避けるために同一セッションのリクエストを同期をとって利用する場合は、Synchronize on Session を有効にします。

  • Actionの場合
    詳しくはActionの設定項目であるAccess Policyの synchronize on session を参照ください。

  • カスタムWebApiの場合
    詳しくはカスタムWebApiの設定項目であるAccess Policyの synchronize on session を参照ください。

1.5. クロスサイトスクリプティング(XSS)対策

JSPまたは、GroovyTemplateにおいてユーザーの入力値を使用する場合、 エスケープ関数 を使用して処理します。iPLAssが提供するJSPでは次のユーティリティが利用可能です。

iPLAssが提供するGroovyTemplateのScriptlet、Expressionでは次のユーティリティが利用可能です。

  • Groovyテンプレートの関数
    escEql()escEqlLike()escHtml()escJs()escXml() の活用
    詳しくはGroovyTemplateの関数を参照ください。

1.6. CSRF(クロスサイト・リクエスト・フォージェリ)対策

iPLAssでは Token をチェックする機能を具備しており、こちらを活用します。

Tokenチェック機能について
  • 画面表示時に正常な画面遷移が行われているかを判断して、画面アクセスを制限する場合、Token の値を送信元画面に埋め込み、リクエストパラメータで送信する必要があります。
    また、Templateにて Token の値を埋め込むためのユーティリティを提供しています。
    詳しくはAction 設定項目のToken Checkを参照ください。

  • iPLAssで提供されるカスタムWebApiにおいて Token のチェックを行うことが可能です。
    Token の値を送信元画面に埋め込み、リクエストパラメータで送信する必要があります。
    詳しくはWebApi 設定項目のToken Checkを参照ください。

1.7. HTTPヘッダ・インジェクション対策

iPLAssでは Java EE/Jakarta EE のServletベースでHTTPヘッダーを処理しています。Servlet利用前提での対策を実施してください。
Servletの実装で改行コードへの対策はなされますが、外部から入力された値をヘッダ出力する際は、想定されている値かどうかのバリデーションは必要です。

1.8. メールヘッダ・インジェクション対策

メールサーバ情報や認証情報は server-config.xml で設定し、MailManager クラスを介してメールを送信します。
宛先(TOやCCなど)を外部入力値からセットする際には、それが想定されている値かどうかのバリデーションは実施してください。
詳しくはメール送信を参照ください。

1.9. クリックジャッキング対策

X-Frame-Options ヘッダを設定する場合は SAMEORIGIN ディレクティブを指定します。
iPLAssではiframeを利用しているため、クリックジャッキング対策として X-Frame-Options ヘッダを設定する場合は SAMEORIGIN ディレクティブを指定します。

1.10. バッファオーバーフロー対策

iPLAssは Java ベースでのシステムとなっており、バッファオーバーフローはJavaランタイム側で対策がなされているとの認識です。

1.11. アクセス制御や認可制御の欠落

iPLAssでは認証・認可の仕組みを提供しています。こちらを使用して権限制御を正しく設定してください。
詳しくは認証 認可 を参照ください。