サーバーでは強制的に強制的に強制したくないが、ユーザーフレンドリーではないのでCAPTCHAを使用したくない/別の会社に依存したくない私自身のキャプチャシステムを実装するつもりはないからです。SQLでログイン試行をロックアウトする方法
私はこのような構造でattempts
テーブルを作成すると考えてきました:
________________________________________________________________
| IP | ATTEMPTS | LOCK |
|‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾|
| 1.1.1.1 | 0 | 2 |
| .... | .... | .... |
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ Yes I had fun making this
、ユーザーが2倍にロック時間を増やす0と にリセットする前に、5-10試みてみましょう - それは数分です。
これは、ブルートフォースをロックアウトするのに適した方法ですか?
が、私は自分のサーバー上でこのようなロジックを持っていると思います: - 私はネイティブSQLでこれを行うには、より効率的な方法があります感じている
....
* on request to server do below *
db.query("SELECT * FROM attempts WHERE IP= *REQUEST.IP* ",function(result){
if (result.rows.length > 0 && result.rows[0].attempts > 5) {
if (CheckIfExpired(results.rows[0].lock)) {
if (loginFail) MultplyLockBy2();
else RemoveFromAttemptsTable();
} else res.status("403").send("You're locked out");
} else normalLoginAttempt().ifFal(add1toAttempts());
....
を抽象化し、私はSQLでの初心者です。 (私はpostgresqlを使用しています)。
これを見てから、開始時間フィールドも必要になると思っています。ロックが切れた時刻を計算できます。
ASP.net + Njinx/Apacheの+セッション+ ...!=のNode.js + SQL
@NeilMcGuiganこれは間違いなくASP.Netの質問の複製ではありません。 –
認証されていない呼び出し(つまり、攻撃者があなたのディスクをいっぱいにすることができます。各呼び出しごとに異なるユーザー名)。 'fail2ban'のようなものが手に入らないWindows paltform *のあなたの答えを*考慮します。おそらくLinux環境で実行されているnodejsアプリケーションの場合、すでに優れたソリューションが用意されており、テスト済みで広く使用されています。 –
私は本当に混乱しています。私はfail2banを実装するかもしれないと思う。ユーザーがキャプチャなしで自分のアカウントに常に接続できるようにするCookieを実装します。また、ロックアウトと組み合わせてキャプチャを使用することもできます。これは良い解決策ですか? –