CookBook

スクリプト開発でのCSRF対策(formタグ編)

投稿日:

Cross Site Request Forgery(CSRF)とは、閲覧者に不正にHTTPリクエストを送信させ、攻撃者の意図した処理を実行させる攻撃手法です。
このCookBookでは、スクリプト開発でformタグを利用する場合のCSRF対策について紹介します。
CSRF対策用のセキュア・トークンを出力するIMARTタグであるimSecureTokenを用いて実装を行います。

セキュア・トークンの詳細な説明は以下のドキュメントを参照してください。
スクリプト開発向けタグライブラリ / imSecureToken

完成イメージ

  1. with_imSecureToken フォームのSubmitボタンをクリックしてください。
  2. セキュア・トークンがリクエストに含まれているため、正常に遷移が行われ、画面にSuccess!と表示されます。
  3. ツールバーの矢印ボタンをクリックしてください。
  4. without_imSecureToken フォームのSubmitボタンをクリックしてください。
  5. セキュア・トークンがリクエストに含まれていないため、403エラー画面が表示されます。

 

完成サンプル

以下の完成サンプルをダウンロードしてご活用ください。

e builder プロジェクト : im_cookbook_113159_CSRF.zip
imm ファイル : im_cookbook_113159_CSRF-1.0.0.imm

ローカル環境で表示させる場合は、以下のURLにアクセスしてください。
http://localhost:8080/imart/im_cookbook/113159/CSRF
なおベースURLである以下の部分は、環境に合わせて適宜変更してください。
http://localhost:8080/imart

レシピ

  1. フォーム画面を作成してください。
  2. 遷移後の画面を作成してください。
  3. ルーティング設定ファイルを作成してください。
  4. セキュア・トークンフィルタ設定ファイルを作成してください。

1. フォーム画面を作成してください。

e Builder のモジュールプロジェクト内に以下のhtmlファイルを作成してください。
src/main/jssp/src/im_cookbook_113159_CSRF/CSRF.html

今回は比較を目的に、セキュア・トークンを含めるformとセキュア・トークンを含めないformの2つを作成してください。
どちらのformも遷移先は im_cookbook/113159/CSRF2 としてください。

セキュア・トークンを含めるformタグの中には <imart type="imSecureToken" /> を記述してください。
imSecureTokenはhiddenタグを生成し、セキュア・トークンを発行するタグです。
このタグを利用することで、直接URLを入力してのアクセスといったセキュア・トークンを発行する画面を経由しないアクセスは、不正なアクセスと見なして遮断することができます。
遮断された場合、403のエラー画面が表示されます。

imSecureTokenの詳細は以下のドキュメントを参照してください。
スクリプト開発向けタグライブラリ / imSecureToken

2. 遷移後の画面を作成してください。

(1) e Builder のモジュールプロジェクト内に以下のhtmlファイルを作成してください。
src/main/jssp/src/im_cookbook_113159_CSRF/CSRF2.html

この画面は、ページが表示された際に「Succsess!」と表示する画面です。
遷移前のフォーム画面に戻るボタンをツールバーに配置しています。

3. ルーティング設定ファイルを作成してください。

e Builder のモジュールプロジェクト内に以下のxmlファイルを作成してください。
src/main/conf/rooting-jssp-config/im_cookbook_113159_CSRF.xml

「2. 遷移後の画面を作成してください。」で作成した各画面のルーティングを設定しています。

4. セキュア・トークンフィルタ設定ファイルを作成してください。

e Builder のモジュールプロジェクト内に以下のxmlファイルを作成してください。
src/main/conf/token-filtering-target-config/im_cookbook_113159_CSRF.xml

セキュア・トークンフィルタ設定ファイルでURLを設定することで、アクセスされた時にセキュア・トークンを用いたリクエストの正当性の確認が実施されます。
<entry>タグのurl属性に、リクエストの正当性の確認を実施するURLを指定してください。
URLは完全一致となるように指定してください。

セキュア・トークンフィルタ設定ファイルの詳細は以下のドキュメントを参照してください。
設定ファイルリファレンス / セキュア・トークンフィルタ設定

-CookBook
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

スプレッドシートにフロー毎の未処理件数を表示するポートレットの作成方法

このクックブックでは、スプレッドシートにフロー毎の未処理件数を表示するポートレットの作成方法をご紹介します。 ポートレットは、スプレッドシートとIM-Workflow REST APIを利用して作成し …

no image

intra-mart WebPlatform の access.log に X-Forwarded-For を出力する方法。

この CookBook では、intra-mart WebPlatform の access.log に X-Forwarded-For を出力する方法について紹介しています。 フロントに Web サ …

no image

Cassandra の Docker を作成する。

この CookBook では、Cassandra の Docker の作成手順について紹介しています。 レシピ ベースイメージの作成 Cassandra の Docker イメージを作成します 実行し …

no image

Lombok のご紹介

この CookBook では、Lombok について紹介しています。 intra-mart 開発本部では Lombok を利用しています。 Lombok を簡単に説明すると、「アノテーションを書くだけ …

no image

IM-BloomMaker Bulma で IM-Knowledge のコンテンツ一覧画面を作ってみよう

2020 Summer から IM-BloomMaker に新しくコンテンツ種別 Bulma が追加されました。 この CookBook では Bulma のエレメントを用いて、IM-Knowledg …

RSSRSSRSSRSS