ギークフィードエンジニアの君島です。Laravelを始めて1年目、自動テストを始めて7年目になります。
今回はCSRF保護対策を実装したLaravel5.6環境をJMeterでテストするための最低限必要な設定方法を記載します。
CSRF対策している前提なので、CSRF例外のRouteに加えた後にテストするというのは無しです。
LaravelのCSRF対策のドキュメントに基づいて、リクエストパラメータを設定しました。
正規表現を使用して直前のレスポンスから値を抽出する方法や、
実際に動作したシナリオとなるテストプランの構成も記載しました。
目次
CSRF対策後の419Unknown statusを解決したい
- JMeterでテストしていたが、CSRF対策をしたところ419 Unknown statusが返るようになった!
- 自動テストの観点でのLaravel環境の記事が少なく、自分で調べることにしました。
Apache JMeterとは
ApacheプロジェクトのWebの負荷、パフォーマンス確認のためのオープンソースソフトウェアです。
Javaで書かれているソフトウェアです。
色々なプロトコルに対応して、サーバ、ネットワーク、アプリケーションのパフォーマンスを測定するために使用します。
Apache and the Apache feather logo are trademarks of The Apache Software Foundation.
解決方法
ポイント
ポイントは、リクエストヘッダにX-CSRF-TOKEN、cookieにX-XSRF-TOKENを設定することです。
他の注意点は、正規表現の使い方やテストプランの構成といった点だけですので、シンプルに実装できます。
詳細は以下に記します。
確認した環境
- JMeter5.1.1
- Laravel5.6でCSRF保護対策を行った環境
テストプラン構成
以下のような構成のテストプランとしました。
文字に起こすとこのような構成になります。
TestPlan
-Thread Group
-HTTP Cookie Manager (X-XSRF-TOKENを設定します)
-Simple Controller(処理をまとめた論理コントローラ)
-HTTP Request(X-CSRF-TOKEN取得のためのリクエスト)
-Regular Expression Extractor(X-CSRF-TOKENを正規表現で取得する後処理)
-Simple Controller(リクエストを投げる処理をまとめた論理コントローラ)
-HTTP Header Manager(X-CSRF-TOKENを設定します)
-HTTP Request(CSRF対策済みの環境でも通過できるリクエスト)
-View Results Tree(結果確認のためのオプション設定)
X-CSRF-TOKEN
概要
リクエストヘッダにX-CSRF-TOKENを設定します。
直前のリクエストにて取得したTOKENを使いまわすようにします。
TOKEN取得用のリクエストを投げ、後処理の正規表現でTOKENの値を取得
最低限、以下のように設定します。
項目 | 値 |
Name of created variable | csrf_token |
Reqular Expression | <meta name=”csrf-token” content=”(.*?)”> |
Template | $1$ |
リクエストヘッダにTOKENの値を設定
最低限、以下のように設定します。
Name | Value |
X-CSRF-TOKEN | ${csrf_token} |
実行時HeaderにDefault値が入ってしまった場合は、正規表現を見直してください。
キーすら入ってない場合は、Header Managerの設定やテストプランの構成を見直してください。
X-XSRF-TOKEN
概要
cookieにX-XSRF-TOKENを設定します。
値は別のリクエストで発行しているCookie情報を入れました。
設定適用後のJMeter実行結果(OK)
200 OKが返るようになりました!
詳細を確認するとHeaderとCookieに上記で設定した値が入っていることも分かります。
まとめ
CSRF保護対策を行ったLaravel環境でのJMeterを使ったテスト方法を記載しました。
ドキュメントを見る限り、この方法でLaravel5.6以降のバージョン(5.8まで)でも対応していると思います。
- CLIでAmazon S3にあるファイル内の文字列検索をしてみる - 2024-02-01
- 不完全なマルチパートアップロードをCLIで確認してS3の無駄コストを無くそう - 2024-01-29
- AlmaLinux9.3にPHP8.3を入れてLaravel9から10にバージョンアップする - 2024-01-12
- AWS CloudShellの表現力を確認してみよう - 2024-01-01
- AWSのアーキテクチャーを学べるAWS Card Clash攻略Wiki - 2023-12-26