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

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

関連記事

no image

IM-BISで複数のセレクトボックスを連動させて利用する方法

このCookBookでは、セレクトボックスの選択結果によって、他のセレクトボックスの選択肢を絞り込む方法を説明します。 この方法は、IM-BIS導入環境で利用することができます。IM-FormaDes …

no image

Web サーバで Cookie に SameSite=None; Secure 属性を追加する方法

ブラウザの仕様変更により、クロスドメインアクセスにおける Cookie の扱いに変更がありました。 Google Chrome では バージョン 80 以降、SameSite 属性が宣言されていない …

no image

Formaのスクリプトから処理対象者を制御するには

このCookBookでは、スクリプトを利用してIM-Workflowの動的ノード(動的承認、縦配置、横配置)の処理対象者を制御する方法をご紹介します。 スクリプトから動的処理対象者設定機能を利用するこ …

no image

Web API Maker を利用した API の作成方法

この CookBook では、Web API Maker を利用した API の作成方法 について紹介しています。 Web API Maker を利用したプログラミングは intra-mart Acc …

no image

availability_check を利用した死活監視方法のご紹介

この CookBook では、availability_check を利用した死活監視方法について紹介しています。 availability_check を利用するには「Resinデータソース設定」モ …