SMPのようなWebアプリケーションに対するサイバー攻撃の対策の一つに「CSRF」という手法があります。
対策を行っていないと、攻撃者がWebアプリケーションに対して任意の処理を行うことが可能となり、データ漏えいや、データを改ざんされる恐れがあります。
このFAQでは、CSRFの具体的な攻撃手法やCSRFの対策方法についてご紹介します。
01CSRFの基礎知識
1.1 CSRFとは
CSRF(クロスサイトリクエストフォージェリ)とは、ログイン状態であるWebアプリケーションの利用者に、特定のURLをクリックさせることなどによって、実行できないはずのリクエストを、利用者を介して第三者が実行する攻撃手法のことです。
例えば、SNSアプリにログイン中のユーザが、攻撃者から誘導されたURLをクリックした場合、
攻撃者がユーザに偽ってSNSアプリサーバーに不正リクエストを送信することができます。
不正リクエストを受けとったSNSアプリサーバーは、ユーザからの正規のリクエストだと判断し、リクエストの処理を実行してしまいます。
その結果、不正投稿されたり、パスワードを変更されるなどの被害に繋がる恐れがあります。
図1.CSRF具体的な攻撃手法イメージ
|
1.2 SMPでのCSRFの影響について
CSRFへの対策を行わない場合、SMPで用意した会員サイトフォームにおいて、攻撃者がリードに偽って申込みリクエストを送信し、申込み処理やキャンセル処理、個人情報の改ざんが行われる恐れがあります。
図2.SMPでのCSRF影響例
|
02SMPでのCSRF対策について
CSRF対策のために必要な手順は3ステップあります。
対策 |
設定方法 |
ステップ1:「リード側CSRF対策」を「有効」にする |
設定一覧>リード側CSRF対策を「無効」から「有効」にする。 |
ステップ2:「CSRFチェックレベル」を「7」にする |
設定一覧>CSRFチェックレベル を「7」にする。
|
ステップ3:申込みフォームのテンプレート内に特定の変数を記載する |
デザインテンプレートのカスタマイズで、申込フォームの入力画面と確認画面のテンプレート内に変数$FORM{Common.all_vars}を記載する。 |
ステップ1と2では、システム設定一覧の各項目「リード側CSRF対策」と「CSRFチェックレベル」の項目設定内容を変更します。
ステップ3では、CSRF対策のために、あらかじめ用意されている弊社独自のデザインテンプレート変数を、SMPで用意する申込みフォームページの入力画面と確認画面のhtmlファイルに記載します。
上記3つの対策を行うことで、システム側でリクエストの照合が強化されリスクを軽減することができます。
■ステップ3:CSRF対策のために用意された変数
$FORM |
説明 |
$FORM{Common.all_vars} |
CSRF対策のために用意された弊社独自のデザインテンプレート変数 |
03対策の設定方法・手順
設定方法は以下のとおりです。
3.1 ステップ1:「リード側CSRF対策」を「有効」にする
全キャンペーン>サイドメニュー:設定>システム設定一覧
- 全キャンペーン>サイドメニュー>設定>システム設定一覧をクリックします。
- 画面内検索(CTRL+F)で「リード側CSRF対策」を検索します。
- 「無効」になっている場合は、画面上部にある「編集」リンクをクリック後、半角数字の1(有効)と入力し画面最下部の登録ボタンをクリックします。
図4:システム設定一覧イメージ
|
3.2 ステップ2:「CSRFチェックレベル」を「7」にする
全キャンペーン>サイドメニュー:設定>システム設定一覧
- 全キャンペーン>サイドメニュー>設定>システム設定一覧をクリックします。
- 画面内検索(CTRL+F)で「CSRFチェックレベル」を検索します。
- 値が「7」以外になっている場合は、画面上部にある「編集」リンクをクリック後、半角数字の7と入力し画面最下部の登録ボタンをクリックします。
図5:システム設定一覧イメージ
|
3.3 ステップ3:申込みフォームのテンプレート内に特定の変数を記載する
CSRF対策のための変数を、申込みフォームのhtmlファイルに記載するには、デザインテンプレートのカスタマイズが必要です。カスタマイズするテンプレートの変更先は、「system.zip」または「seminar.zip」です。
設定手順(system.zip)
全キャンペーン>サイドメニュー>WEB>テンプレート変更
- 全キャンペーン>サイドメニュー>WEB>テンプレート変更をクリックします。
- 最新登録日時のsystem.zipのダウンロードをクリックします。
※登録日時がついた[ダウンロード]リンクがない場合は、
[デフォルトダウンロード(system.zip)]をクリックし、ダウンロードします。
※ダウンロードしたsystem.zipは修正用とバックアップ用に分けて保存してください。
- system.zipを解凍し、申込入力画面と確認画面のindex.htmlをテキストエディタで開きます。
※キャンペーンのフローにより、index.htmlへのファイルパスは異なります。
■申込入力画面
例1)フロー名:キャンペーン申し込み([ユーザー情報])
申込み入力画面:seminar_base/application/application_flow_master_id/user/index.html
例2)フロー名:キャンペーン申し込み([ユーザー情報/アンケート])
申込み入力画面:seminar_base/application/application_flow_master_id/userenquete/index.html
■確認画面
seminar_base/application/application_flow_master_id/confirm/index.html
-
$FORM{Common.all_vars}がコメントアウトされているまたは記述自体ない場合は修正・追記し、上書き保存します。
- 修正が終わったsystem.zipを再度ZIPに圧縮します。
- SMPの管理画面>全キャンペーン>WEB>テンプレート変更画面に戻ります。
- 画面右上の[新規登録]ボタンをクリックして、system.zipを選択し、 [登録]ボタンをクリックします。
設定手順(seminar.zip)
全キャンペーン>個別キャンペーン:「管理開始」リンク>サイドメニュー>[キャンペーンテンプレート変更]
- 全キャンペーンより、個別キャンペーンの[管理開始]リンクをクリックします。
- サイドメニュー>[キャンペーンテンプレート変更]リンクをクリックします。
- キャンペーン内の最新登録日時のseminar.zip、または[デフォルトダウンロード(seminar.zip)]リンクをクリックします。
- seminar.zipを解凍します。
- 申込入力画面と確認画面のindex.htmlをテキストエディタで開きます。
※キャンペーンのフローにより、申込入力画面のindex.htmlへのファイルパスは異なります。
■申込入力画面
例1)フロー名:キャンペーン申し込み([ユーザー情報])
申込み入力画面:seminar/application/application_flow_master_id/user/index.html
例2)フロー名:キャンペーン申し込み([ユーザー情報/アンケート])
申込み入力画面:seminar/application/application_flow_master_id/userenquete/index.html
■確認画面
seminar/application/application_flow_master_id/confirm/index.html
上記、seminar.zipを適用されている場合のファイルパスとなります。
- $FORM{Common.all_vars}がコメントアウトされているまたは記述自体ない場合は修正・追記し、上書き保存します。
- 修正が終わったseminar.zipを再度ZIPに圧縮します。
- 個別キャンペーン画面に戻り、サイドメニュー>[キャンペーン]をクリックします。
- サイドメニューの[キャンペーンテンプレート変更]をクリックします。
- [新規登録]ボタンをクリックして、seminar.zipを選択し、 [登録]ボタンをクリックします。
図7.デザインテンプレート編集イメージ(seminar.zip)
|
04対策後の確認方法
上記設定手順でSMPでのCSRF対策を行うことにより、
下記タグが申込みページのHTMLソース内に表示されるようになります。
■申込みページのHTMLソース内に表示されるようになるタグ
タグ |
説明 |
<input type="hidden" name="csrf_id" value="XXXXX"> |
CSRF対策が行われている場合 HTMLソース内に表示されるようになります。 ※"XXXXX"には変動値が入ります。 |
下記手順にてタグが表示されているのかを確認することができます。
- 対策をした申込みフォームページにアクセスします。
- 右クリックし、「ページのソース」を表示します。
- 以下タグを画面内検索(CTRL+F)し、HTMLソース内に表示されるか確認します。
※検索するタグ
<input type="hidden" name="csrf_id" value=
図8.画面内検索イメージ
|
05関連コンテンツ