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アドレスは同じ、というのはよくあるためか。
なので、この対策は???。そこまで必要ないかもしれないし。