【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【WordPress 専用】クラウドサーバー『ウェブスピード』

【WordPress 専用】クラウドサーバー『ウェブスピード』

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【予約システム開発】EDISONE カスタマイズ開発サービス

【予約システム開発】EDISONE カスタマイズ開発サービス

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【200ヶ国以上に対応】グローバル eSIM「ビヨンドSIM」

【200ヶ国以上に対応】グローバル eSIM「ビヨンドSIM」

【中国への旅行・出張・駐在なら】中国SIMサービス「チョコSIM」

【中国への旅行・出張・駐在なら】中国SIMサービス「チョコSIM」

【グローバル専用サービス】北米・中国でも、ビヨンドのMSP

【グローバル専用サービス】北米・中国でも、ビヨンドのMSP

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

【JMeter】CSRFトークンの取得とPOSTリクエスト

こんにちは!システム開発部の福井です!

この度、JMeter を使用したシナリオ作成で、CSRF保護されたページからのPOSTリクエストを行うにあたり、何度か403エラーで弾かれてしまったため、その解決方法についてご紹介させていただきます!

本記事では、主に
・CSRFトークンの取得
・取得したトークンを使用したPOSTリクエスト
の2点についてご紹介させていただきます!

※ちなみに、個人的な備忘録も兼ねて、覚えておきたい JMeter の設定をブログ末尾に記載いたしました。これから JMeter を使われる方は最後までお読みいただけますと幸いです。

CSRFトークンの取得

では早速、CSRFトークンの取得方法からご説明いたします。
CSRFトークンを取得するには「正規表現抽出」機能を使用します。

■ 「正規表現抽出」機能の追加

正規表現抽出の追加方法ですが、CSRFトークンを発行している画面表示のHTTPリクエストのサンプラーに対して、
『追加』→『後処理』→『正規表現抽出』の設定を行う事で追加する事ができます。
※例えば、ログイン処理のPOSTリクエストがあり、そのリクエストパラメータでCSRFトークンが必要な場合、事前の「ログイン画面表示」のGETリクエストに対して、正規表現抽出を追加する流れとなります。

追加ができたら以下の画面が表示されますので、各項目の設定を行います。

■「正規表現抽出」の設定

今回は例として以下の様に設定を行いました。設定が必須の項目についてご説明させていただきます。

① Field to check

抽出したい値の対象を選択します。今回は、「Body」を選択してください。
※CSRFトークンを抽出するページのGETリクエストのレスポンスボディを利用するため。

② 参照名

抽出した値(今回はCSRFトークン)が入る変数を入力します。後ほど、POST送信する際のCSRFパラメータの値として使用します。任意の文字列を入力してください。

③ 正規表現

CSRFトークンが入るinputタグを入力します。value属性の値を正規表現で書くことで、CSRFトークンの値を取得できます。
※上記画像の入力内容は一例となります。実際に画面表示のレスポンスで取得できるinputタグの形式に合わせて修正してください。inputタグの形式が異なるとCSRFトークンの値が取得できません(id属性の有無や、name属性の入力ミスなど)。特につまづきやすいポイントになるため、可能であれば、実際にデベロッパーツールでhtml内のinputタグをコピーしてvalue属性の値を修正して利用する事をおすすめいたします。

④ テンプレート

抽出した値の「~番目」を使用するかを指定します。特に指定がなければ、最初に取得した値を使うため、「$1$」を入力してください。

正規表現抽出の設定は以上となります。

取得したトークンを使用したPOSTリクエスト

では、次に取得したCSRFトークンをリクエストパラメータに含めてPOST送信する方法をご紹介いたします。

以下にリクエストパラメータの設定例を掲載いたしました。

設定は非常に簡単で、対象となるPOSTリクエストのサンプラーに「${正規表現抽出で設定した参照名}」の形式でパラメータを設定する事で、取得したCSRFトークンを送る事ができます。

あとは状況に応じて、リクエストヘッダや、その他必要なパラメータを設定して完了となります。

おまけ(覚えておきたいJMeterの設定)

冒頭でご紹介させていただきました通り、JMeterの「覚えておきたい設定」を2つご紹介させていただきます。

■ Basic認証

負荷試験を実施する際、Basic認証が必要な場合は「HTTP認証マネージャ」を使用する事でログインする事ができます。
HTTP認証マネージャは「スレッドグループ」、「シンプルコントローラ」、もしくはBasic認証が必要な「最初のHTTPリクエストのサンプラー」のいずれでも追加が可能です。
『追加』→『設定エレメント』→『HTTP認証マネージャ』で追加する事ができます。

HTTP認証マネージャの追加ができましたら、上記画面が表示されますので、「基底URL」「ユーザー名」「パスワード」を入力し、設定は完了となります。

■ HTTPクッキーマネージャ

続いて、シナリオで cookie 保持が必要な場合についてですが、こちらは、「HTTPクッキーマネージャ」を設定する事で cookie情報の利用が可能となります。
HTTPクッキーマネージャも「スレッドグループ」、「シンプルコントローラ」、「サンプラー」のいずれにも追加が可能で、『追加』→『設定エレメント』→『HTTPクッキーマネージャ』で追加する事ができます。

追加できましたら上記画面が表示されますが、HTTPクッキーマネージャは特段、テストに使用したい値がなければ、このまま利用する事ができます。
※「繰り返しごとにクッキーを破棄しますか?」の項目ですが、こちらはチェックを入れる事でループ毎のクッキーを破棄する事ができます。
※HTTPクッキーマネージャ追加後、シナリオを実行し、リクエストボディで Cookie Data が送られている事が確認できたら設定は完了となります。

最後に

私が所属するシステム開発のサービスサイト「SEKARAKU Lab(セカラク ラボ)」を開設しました。
ビヨンドは、サーバーの設計・構築から運用までをワンストップでお任せいただけますので、サーバーサイド開発でお困りの方はお気軽にお問い合わせください。
SEKARAKU Lab:[https://sekarakulab.beyondjapan.com/](https://sekarakulab.beyondjapan.com/)

今回は以上となります!
最後までお読みいただきまして、ありがとうございました!

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
5
読み込み中...
5 票, 平均: 1.00 / 15
9,843
X facebook はてなブックマーク pocket
【2025.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

【2025.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

この記事をかいた人

About the author

福井 浩人

2020年6月にビヨンドに入社。システム開発部 (横浜オフィス) にて勤務。
業務ではPHPを中心に、ゲームAPIやWebシステムの開発、Shopifyプライベートアプリの開発を担当。
洋楽を主として音楽全般が好きで趣味でギターを弾いている。好きなTV番組は、「探偵!ナイトスクープ」「出没!アド街ック天国」。