1

ボットネットなどによるパスワードクラッキングを防ぐために、IPごとではなくすべてのIPに対して、1秒あたりのアクセスをグローバルに制限する方法を考えています。これにより、事実上、パスワード クラッキング攻撃が DDOS 攻撃に変わります。

このスクリプトへの予想されるトラフィックは非常に少ないことに注意してください (1 日あたり 1 アクセス)。

例えば

//pseudocode...
while (now() - last_access < 1 second)
    sleep(0.3 seconds)

last_access = now()

2 つの質問

  1. これは良い考えですか?
  2. PHPでそれを行う方法は?(私はApacheの設定を制御できないため)

編集: n 人のユーザーが一度にサイトにアクセスしようとしている場合、それぞれが n 秒待ってくれることを嬉しく思います。それぞれ 1 ページのみをロードする必要があります。

4

4 に答える 4

2

まず、自分のしきい値を把握する必要があります。より高い負荷と見なされるものと、DDOS 攻撃と見なされるものは何ですか?

次に、last_access 変数をデータベースなどのより永続的な場所に保存する必要があります。

しかし、はい、あなたが探しているものは可能であり、サイトが頻繁に攻撃を受けている場合に推奨されます.

スリープ (攻撃の場合は役に立たない) の代わりに、単純にジェネリックを表示します。

<h1>The server is currently experiencing extreme load. Please try again later</h1>

しきい値は、最後の数秒間で 5 ユーザー程度にする必要があります (この場合、最後の数秒間のすべてのアクセスをログに記録し、自分で計算する必要があります。


より良いアプローチは、ユーザー登録を強制し、登録時に Captcha を使用することです。

于 2012-07-04T16:12:27.987 に答える
2

このサイトが合法的に 1 日に 1 回しかアクセスされないことが絶対に確実である場合は、もちろんそうすることができます。

PHP を使用して txt ファイルに書き込み、そこに最後のアクセスを保存することができます。つまり、データベースまたはその情報を保存する他の手段にアクセスできない場合です。

あなたが言及したように、非常に小さな攻撃 (1 秒あたり 3 ~ 4 ヒットは DOS 攻撃とは言い難い) でさえ、あなたをロックアウトするのに十分であるため、これによりサイトが永久にダウンする可能性があります。

于 2012-07-04T16:15:13.960 に答える
1

考えてみてください。

これは基本的に「DDoS の使い方」の説明です。

制限を設定してその時点からアクセスを禁止すると、自分のサイトがクラッシュするだけです。これは、とにかく DDoS 攻撃の最終目標です。また、このような人為的な制限を設定すると、DDoS 攻撃よりも速くサイトがクラッシュします (実際の「ハード リミット」に達する前にスクリプトをアクティブにする必要があるため)。

DDoS ミティゲーションは、「DDoS 攻撃中に運用を維持するにはどうすればよいか?」という質問に対処します。自分をシャットダウンすることは答えではありません。

シアン化合物で頭痛を治すようなものです。「技術的には」効果がありますが、治療法とは言えません。

于 2012-07-05T10:23:39.563 に答える
1

ボットを防ぐためのより良い方法があります。まず、ユーザーがサイトをすぐに使用できないようにすることは、あまり良い考えではありません。代わりに、同じ種類のアプローチを使用して、IP がログインを試みてからの経過時間をテストできます。たとえば、1 秒未満の場合は、入力も処理せず、「Slow down!」だけを出力します。より良い方法は、単純な数学の問題のように、captha-similar メソッドを使用することです。

于 2012-07-04T16:12:51.137 に答える