Brute Forceに対してIPチェック
-
26-10-2019 - |
質問
ログインAttempterのIPをチェックすることにより、ブルートフォースを防ぎたいです。ただし、データベースにとって大きな問題になります。攻撃の場合に過負荷になります。他に解決策はありますか?
サーバーサイドセッション?何かのようなもの
$_SESSION['$IP'] = $_SESSION['$IP'] +1;
Captchaは迷惑だから使いたくありません。
解決
どの用語でDBに過負荷になりますか?失敗したログインの数(成功したログインでクリア)を使用して、IPアドレスごとに1つのレコードのみを維持できます。数字がゴミ箱に到達した場合、たとえば1時間のアカウントをブロックし、アカウントがブロックされたときにタイムスタンプに提出されたものを維持することができます。すべての試みを記録する必要はありませんよね?
他のヒント
攻撃がスクリプトから来ている場合、セッションはセッションさえサポートすることさえありません。スクリプトはその発信元のIPを常に変更できるため、IPは依存できません。
私は、PHPでブルートフォースの攻撃保護を処理するクラスを作成しました。
https://github.com/ejfrancis/bruteforceblocker
DBテーブルでサイト全体で失敗したすべてのログインを記録し、過去10分間のログインの数(または選択した時間枠)が設定された制限を超えている場合、時間遅延および/またはCAPTCHA要件を強制します再びログインする前に。
例:
//スロットル設定配列を構築します。 (#最近失敗したログイン=>応答)。
$ throttle_settings = [
50 => 2, //delay in seconds 150 => 4, //delay in seconds 300 => 'captcha' //captcha
];
$ bfbresponse = bruteforceblocker :: getlogintatus($ throttle_settings);
// $ throttle_settingsはオプションのパラメーターです。含まれていない場合、bruteforceblocker.phpのデフォルト設定配列が使用されます
switch($ bfbresponse ['status']){
case 'safe': //safe to login break; case 'error': //error occured. get message $error_message = $BFBresponse['message']; break; case 'delay': //time delay required before next login $remaining_delay_in_seconds = $BFBresponse['message']; break; case 'captcha': //captcha required break;
}