0

私はlaravel 5プロジェクトを持っており、使用しているテストサーバーを攻城ツールでベンチマークしたいと思います。

残念ながら、通常は投稿フォームから CSRF を受け取るため、ログインできないことがわかりました。攻城戦にはフォームがないため、このトークンは送信できません。

これにはいくつかの方法で取り組むことができますが、ソース管理に残してセキュリティに悪影響を及ぼさないものを探しています。たくさんのメンテナンスをせずにLaravelでSiegeを動作させるための良い方法は何ですか?

4

2 に答える 2

1

2つのこと:

  1. サイトにログインするように包囲を設定できます。詳細については、この ServerFault の投稿を参照してください。ただし、これはログイン フォームをテストするだけです。
  2. _token同じ方法を使用して、任意のリクエストでパラメーターを送信できます

どうやら、これに関するドキュメントは、公式マニュアルではなく、コード内のコメントにあります。

あなたが残した問題は、_token変数でどの値を渡すかです。明らかに、偽の値は、まさに CSRF が保護することになっている種類のものです。app/Http/Middleware/VerifyCsrfToken.phpこれを行う最も簡単な方法は、事前に設定された値に対して「一致」する特別な条件を追加するように変更することだと思います。

.env最初に行うことは、顔の CSRF トークンを含む変数をファイルに作成することです。

FAKE_CSRF_TOKEN=dd0dda7d4b5e92fafd9e5bebfabd7709

そして、App\Http\Middleware\VerifyCsrfToken(つまり、上で参照したファイル) で、tokensMatch($request)関数をオーバーライドします。あなたは次のようなことをするかもしれません:

protected function tokensMatch($request)
{
    $parent = parent::tokensMatch($request);
    $token = $request->input('_token');
    return $parent || $token == env('FAKE_CSRF_TOKEN');
}

次に、テストでは、常に偽の CSRF トークン値を として渡します_token。もちろん、

このコードは本番サーバーでは絶対に実行しないでください!

私だったら、特別な.env.siegeファイルを作成APP_ENV=siegeして、テスト サーバーまたはステージング サーバーに設定するかもしれません。tokensMatch()次に、上記の関数を次のように書き直します。

protected function tokensMatch($request)
{
    $parent = parent::tokensMatch($request);
    if ('siege' === env('APP_ENV')) {
        $token = $request->input('_token');
        return $parent || $token == env('FAKE_CSRF_TOKEN');
    }
    return $parent;
}

そうすれば、この変更されたミドルウェアが何らかの形で本番サーバーに侵入したとしても、偽の CSRF 攻撃に対する保護が強化されます。最終的な結果として、CSRF を無効にすることなく、本番環境にあるかのようにサーバーのストレス テストを行うことができます。

とはいえ、リソースを大量に消費するCSRFチェックが実際にどのように行われているかはわかりません。ここで提案する変更を行うよりも、ストレス テストで CSRF をオフにする方が簡単かもしれません。

于 2015-11-03T21:58:32.387 に答える