2016-10-07 11 views
1

サーバーでは強制的に強制的に強制したくないが、ユーザーフレンドリーではないので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

+2

@NeilMcGuiganこれは間違いなくASP.Netの質問の複製ではありません。 –

+0

認証されていない呼び出し(つまり、攻撃者があなたのディスクをいっぱいにすることができます。各呼び出しごとに異なるユーザー名)。 'fail2ban'のようなものが手に入らないWindows paltform *のあなたの答えを*考慮します。おそらくLinux環境で実行されているnodejsアプリケーションの場合、すでに優れたソリューションが用意されており、テスト済みで広く使用されています。 –

+0

私は本当に混乱しています。私はfail2banを実装するかもしれないと思う。ユーザーがキャプチャなしで自分のアカウントに常に接続できるようにするCookieを実装します。また、ロックアウトと組み合わせてキャプチャを使用することもできます。これは良い解決策ですか? –

答えて

0

使用fail2ban。 HTTP要求は401(無許可)を返し、fail2banフィルタは連続する401に対してaccess_logと一致し、呼び出し元を10分程度(IPファイアウォールレベルで)禁止する必要があります。

あなたが気づいたように、答えはSQL、postgresql、nodejsとは関係ありません。

+0

サーバによって制御されるのか、fail2banプログラムによって外部から処理されるのでしょうか? –

+0

あなたの質問で「サーバー」は誰ですか? –

+0

のように私のノードのアプリ;私はそのページを読んだところ、ログファイルを更新してfail2banが自動的にすべてを処理するように見えますか? –

関連する問題