CSRF保護対策したLaravel5.6環境でのJMeterの使い方

ギークフィードエンジニアの君島です。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情報を入れました。

 

Cookie Managerでパラメーターを設定する

 

 

設定適用後のJMeter実行結果(OK)

200 OKが返るようになりました!

詳細を確認するとHeaderとCookieに上記で設定した値が入っていることも分かります。

 

 

まとめ

CSRF保護対策を行ったLaravel環境でのJMeterを使ったテスト方法を記載しました。

ドキュメントを見る限り、この方法でLaravel5.6以降のバージョン(5.8まで)でも対応していると思います。

この記事が気に入ったら
いいね ! しよう

Twitter で
The following two tabs change content below.
君島翔
君島翔
AI事業部事業部長株式会社ギークフィード
Java, .NET系の言語が得意。Laravelも使います。 エディタはvim派。 自分が楽するためにテストやビルド、デプロイを自動化させたい。 2022-2023 AWS Ambassador / 2022-2023 Japan AWS Top Engineer / 2022-2023 Japan AWS ALL Certifications Engineer

【採用情報】一緒に働く仲間を募集しています

採用情報
ページトップへ