2

Apache Web サーバーの別のセキュリティ上の注意事項を探しています。私は通常、PHP と MySQL を使用します。

ユーザー ログインなどのプロセスでは、IP アドレス、試行回数、前回の試行時間をデータベースに保持しているため、過去 n 分間または数秒間に誰かが x 回以上試行した場合、単純に IP アドレスをブロックします。

ユーザー ログインなどのさまざまなプロセスが多数ある場合、IP アドレスをデータベースに保持するのは正しくないように思えます (パフォーマンスの低下と、やるべきことが多いため)。セキュリティが必要な場合、パフォーマンスをいくらか犠牲にする必要があることはわかっていますが、ユーザーがあまりにも多くのリクエストを行うのを止めるより良い方法はありますか? 多分Apacheへのモジュール?または、サーバーに対するより低いレベルの警告ですか? 私は特に、不必要なデータベース作業を避けようとしています。

CAPTCHA の使用を検討しましたが、すべてのフォームに使用するとユーザー エクスペリエンスが損なわれます。そして、n 分の x リクエストの後にそれを使用するには、私が言及した最初のテクニックが必要です。

キャッシュ システムが役立つかもしれませんが、ブルート フォース攻撃やデータベースがゴミでいっぱいになるのを防ぐ方法がわかりません。私の知る限り、データベースからの読み取りにのみ役立ちます(間違っている場合は修正してください)。

4

2 に答える 2

1

あらゆる種類のボット/ハッカーから Web サイトを保護する CloudFlare を試してみてください。stackoverflow はプログラミングに関する質問であり、セキュリティの問題やホスティングの問題に関する質問ではないことに注意してください。

于 2013-01-27T14:20:21.423 に答える
1

上記の@rantyのコメント(同時に多くのユーザーがいない限り適切です)以外に、memcachedなどのメモリキャッシュシステムを使用できます。それは素敵な php インターフェイスを持ち、非常に使いやすいです。

すべてのログイン試行を memcache にダンプします (IP アドレスをキーとして、trycount を値として使用し、timespan によってクリアされます)。これは高速であり、パフォーマンスや開発作業にあまりコストがかからないはずです。

このための疑似コードは次のようになります。

$memcache_obj = memcache_connect('memcache_host', 11211);
$ip = $_SERVER('REMOTE_ADDR');
$trycount = memcache_get($memcache_obj, $ip);
if ( $trycount == null ) $trycount=0;
if ( $trycount > 3 ) die('bad user');
memcache_set($memcache_obj, $ip, $trycount++ , 0, 30);
于 2013-01-27T14:27:39.077 に答える