4
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JMeterでSpring SecurityのCSRF対策を使用したAPIを呼び出す際の設定

Last updated at Posted at 2019-05-05

やりたいこと

長いタイトルの通りです。
Vue.jsのアプリケーションから呼び出すAPIをSpring Bootで作ってまして、
そのAPIの負荷試験を行うことになったと。
JMeterを使用してシナリオを作成するのですが、Spring SecurityのCookieCsrfTokenRepositoryを使用したCSRF対策を使っているので

  • CSRFトークンとしてXSRF-TOKEN Cookieの値を取得して
  • POSTを使用したAPIをコールする際のX-XSRF-TOKENヘッダとして設定する

ということをシナリオ中で行う必要が生じたわけです。

試験対象APIのざっくり仕様

イメージだけ、こんな感じです。

url HTTPメソッド 概要
/login POST ID/Passwordを送信してログインする
ログイン成功時にXSRF-TOKENCookieが付与される
CSRFチェック対象外
/orders POST 受注登録を行う
CSRFチェック対象

環境

アプリケーション

  • Spring Boot 2.1.4

ツール

  • Apache JMeter 5.1.1
    • 設定はGUI起動で実施します。

JMeterの設定

XSRF-TOKENの値を取得する

/loginのレスポンスにXSRF-TOKENのCookieが含まれることになるので、それを抽出することになります。
一応、DevToolsで/loginのレスポンスを見てみると、こんな感じです。

XSRF-TOKEN.jpg

設定

/loginの呼び出しはHTTP Requestサンプラーで定義します。(詳細は割愛)
このサンプラーの実行後に、正規表現抽出を使用して、CSRFトークンを取得します。

手順
  1. /loginHTTP Requestサンプラーを選択して右クリック
  2. ADDPost ProcessorsRegular Expression Extractor を選択
  3. 以下の通り設定する(NameとCommentsは適当です)
    csrfトークン取得.jpg
  • Response Headersから抽出する
  • ヘッダからの抽出になるので、先程DevToolsで確認した形式、要は「Set-Cookie:」を含んだ形式で正規表現を書く必要がある

というあたりがポイントでしょうか。
これ以降のシナリオでは、${xsrf_token}を指定することで、抽出した値を変数から解決することができるようになります。

X-XSRF-TOKENヘッダを設定する

/ordersはCSRFチェック対象となるため、コール時にX-XSRF-TOKENヘッダを設定する必要があります。

設定

/ordersの呼び出しはHTTP Requestサンプラーで定義します。(詳細は割愛)
このサンプラーの実行時に、HTTP Header Managerを使用して、X-XSRF-TOKENヘッダを設定します。

手順
  1. /ordersHTTP Requestサンプラーを選択して右クリック
  2. ADDConfig ElementHTTP Header Manager を選択
  3. 以下の通り設定する(NameとCommentsは適当、content-typeは今回のAPI固有の仕様で必要なため設定しています)

X-XSRF-TOKEN付与.jpg

先程取得した${xsrf_token}を、X-XSRF-TOKENヘッダとして設定しています。

まとめ

以上の設定で、CSRF対策を通過させることができます。
JMeterに不慣れだと、こういうちょっとした応用ってすぐに思いつかなくて
意外と悩むかなと思った(不慣れな私の実体験です)ので書き留めておきました。

参考ページ

以下を参考にさせていただきました。
ありがとうございました。

4
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?