0

ユーザー名/パスワードによるログイン試行が 4 回失敗した後、サーバーへの IP アクセスを拒否したいと思います。/etc/apache2/httpd.conf ファイルに IP またはブロックを追加して、以前に Web サーバーへのアクセスを拒否しました。

<Location "/">
    Order Allow,Deny
    Allow from all
    Deny from 1.2.3.4/30 3.4.5.6/15
    Deny from 9.4.3.4
</Location>

PHPでプログラム的にこれを行う方法を知っている人はいますか、または設定された間隔で「IP拒否リスト」についてApache2クエリmysqlを持っていますか?

ありがとう!

明確にするために編集

フォームの送信が完了すると、mysql はユーザー名を照会されます。ユーザー名が見つかった場合、スクリプトは pw のチェックを続行し、その後、失敗したログインをチェックします。失敗したログイン カウンタが >=4 の場合、ユーザーのアカウントはロックされていますが、引き続きサーバーにアクセスできます。

ユーザー名が見つからない場合は、差分を照会します。ユーザーの IP のテーブル。IP が見つかり、login_counter >=4 の場合、上記の apache2 httpd.conf のような方法を使用してサーバーから IP をブロックします。

* *最終編集/感想

www-data ユーザーパーマを付与すると、より大きなセキュリティ上の脆弱性が生じるのではないかと心配しています。.htaccess ファイルを編集するには、参照する方法がないためです。www-data書き込み可能な.htaccess内のファイル、これが私の解決策です。

ユーザー名が db にない場合は、IP を db に書き込み、IP ごとに失敗した試行を追跡します。サイトの再訪問時に、IP が db にあり、4 回以上試行した場合、ログイン スクリプト die() が実行されます。次に、外部スクリプト (www-data からはアクセスできません) を作成します。このスクリプトは毎晩 db をポーリングして、試みが 4 以上の IP を探し、それらを .htaccess に追加します。

4

1 に答える 1

0

更新: 内にファイルを含めることができることが.htaccessわかったので、いくつか変更を加えました。

ここで何が起こるかというと、.htaccessファイルを取得し、最後の行を削除してからAllow from all、新しい拒否ルールを追加し、削除した行を追加します。

ファイル.htaccessは次のようになります。

order Deny,Allow
Deny from 9.4.3.4
Allow from all

ユーザーがログイン試行回数を超えた場合、次のようにします。

$file = file('.htaccess');
array_pop($file);
$fh = fopen('.htaccess','w');
fwrite($fh, implode('',$file));
fclose($fh);
$fh = fopen('.htaccess', 'a');
fwrite($fh, 'Deny from '.$_SERVER['REMOTE_ADDR']);
fwrite($fh, 'Allow from all']);
fclose($fh);

まあ、これは基本的な考え方です。それを利用してカスタマイズし、自分の環境に適用することができます

于 2012-06-25T15:32:09.930 に答える