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では次のユーティリティが利用可能です。
-
EL関数
escEql()
、escJs()
の活用
詳しくはJSPカスタムタグ・EL関数を参照ください。
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ランタイム側で対策がなされているとの認識です。