web-dev-qa-db-ja.com

悪意のあるボットがスパムを投稿するのを防ぐ

私は覚えている サイトが閉鎖された 誤用のため、ボットにその一部があるのだろうか。ボットが私のサイトに何かを投稿している場合、それと戦う方法は何ですか?私はいくつかのクッキーを設定し、JavaScript +タイムスタンプと署名を使用してクッキーを変更することを考えていました(したがって、昨日のクッキーは今日と来週使用できません)。

ほとんどの人/ボットは、ボットでJavaScriptを有効にするのではなく、別のサイトを使用するだけだと確信しています。

他に何ができますか?私は毎日POST制限と、ランダムにスパムを投稿するだけの一般的なボットのためのハニーポットを考えています。

15
user1585

次のようないくつかのことができます。

  1. ボットのみに見える偽のフィールドを配置します。次に、そのフィールドがフォームの残りの部分とともに送信された場合、それを無視できます(必要に応じてそれらを禁止します)。 非表示のリンクをたどる悪いボットをトラップする もできます。

  2. reCAPTCHA のようなCAPTCHAを使用します

  3. ユーザーが5 + 3のような質問に答える必要があるフィールドを使用します。人間は誰でも答えることができますが、ボットはフィールド名に基づいてフィールドを自動入力するため、何をすべきかわかりません。そのため、そのフィールドは正しくないか欠落しているため、送信は拒否されます。

  4. トークンを使用してセッションに入れ、フォームに追加します。トークンがフォームで送信されないか、一致しない場合、トークンは自動化され、無視できます。

  5. 同じIPアドレスからの繰り返し送信を探します。フォームがあまり多くのリクエストを受け取るべきではないが、突然ボットにヒットしている可能性がある場合、一時的にIPアドレスをブロックすることを検討する必要があります。

  6. Askimet を使用します。スパムの識別に優れています。

13
John Conde

ジョン・コンデは多くの良いアプローチを概説しています。アンチボット/アンチスパム技術の選択に関する問題は、有効性と利便性のバランスをとることです。コメントやメッセージを投稿するたびにCAPTCHAに記入する必要があるのは本当に不便ですが、サインアップ時にCAPTCHAのみが必要な場合は、スパマーを阻止しないこともあります。

受動的な手法のいくつかは、人間の行動を必要としないため、優れた代替手段です。問題は、ボットがますます高度化しており、ボットがCAPTCHAを解決できれば、JSとCSSを確実に処理できることです。そのため、あまり知られていないCSSを使用してボットトラップフィールドを非表示にするなど、少し工夫する必要があります。

しかし、あなたの質問に基づいて、ボットプルーフサイトを作成することではなく、ボットユーザーが他のより簡単なターゲットを選択するだけの十分な抑止力を作成することがポイントであることに気付いたと思います。そのため、ここで何が必要かはサイトごとに異なり、おそらく試行錯誤のテストが必要になります。最初に最も目立たない手法を試します。

最後に、サイトのスパムを除去するもう1つの方法は、ピアモデレーションを使用して、ボットが送信したコメントまたは手動で送信されたすり抜けるスパムを削除することです。

6
Lèse majesté

John Condeが#1)で述べたように、そしてあなたが言及したように、ハニーポットはほとんどの場合とほとんどのWebサイトで非常にうまく機能します。ボットによって実行された場合、Johnが言及した他の方法のいずれかを実行できます。しかし、正直に言って、サイトのトラフィックが少ない場合や平均的なトラフィックの場合は、これでうまくいくはずです。

例、私のお気に入りの1つ:

<form action="/process-form">
<input name="email" placeholder="Enter Your Email">
<input name="email_address" placeholder="Enter Your Email" style="display:none;">
<input type="submit" value="Submit"></form>

これで、フォームが送信されると、非常に高い割合のボットが「email」と「email_address」の両方に記入しますが、人間は「email_address」ではなく「email」のみを記入します。したがって、 `/ process-form 'コードでは、確認のためにemail_addressが空かどうかを確認する必要があります。

シンプルで効果的。

1