リバース・ブルートフォース攻撃

Laravelの安全性を調べる中で、ログインの入力を失敗した際に、1秒のタイムラグすなわち不応期を設けることで、ブルートフォース攻撃への対策になるという情報があった。

Larvelは初期設定で、5回失敗したら1分間は再入力できないことになっている。
これで問題ないけど、設定の変更方法がわからなかった。

また、Laravelの既定値ではリバース・ブルートフォース攻撃に対応していないとの情報をもらった。
パスワードを固定して、ユーザーIDをどんどん変更してアカウントを探る手法とのこと。
使われやすいパスワードランキングというのも公表されているので恐ろしい。

この対策もわからなかった。ネットの情報をいろいろ試したが、なんか変。

FortifyServiceProvider

が答え。 app\Providers\FortifyServiceProvider.php


        RateLimiter::for('login', function (Request $request) {
            $email = (string) $request->email;

            return Limit::perMinute(5)->by($email.$request->ip());
        });

        RateLimiter::for('two-factor', function (Request $request) {
            return Limit::perMinute(5)->by($request->session()->get('login.id'));
        });

5という数字がある。
(throttle機能というのがあって、あちこちに現れるが、設定回数が60回となっていて意味がわからなかった。これはapiという機能を使うときに必要なのだと思われる。とりあえず放置)

コードを見ると、emailもキーにしてカウントしている。
リバース・ブルートフォース攻撃では、emailが毎回変わるのでカウントできない。

emailを外してみる。

RateLimiter::for('login', function (Request $request) {
            # $email = (string) $request->email;

            #return Limit::perMinute(5)->by($email.$request->ip());
            return Limit::perMinute(2)->by($request->ip());
        });

        RateLimiter::for('two-factor', function (Request $request) {
            return Limit::perMinute(5)->by($request->session()->get('login.id'));
        });

一応、パスワード固定で、IDを変更してみたら、2回失敗の3回目入力後に

429 TOO MANY REQUESTS

となった。できたということだと思うけど、emailが既定になっていたのが不安。
別の人だけどIPアドレスは同じ、というのはよくあるためか。

なので、この対策は???。そこまで必要ないかもしれないし。