web-dev-qa-db-ja.com

ハニーポットの実装の改善(フォームスパム対策)

私たちのサイトでこれらのスパムボットを取り除くにはどうすればいいですか?

すべてのサイトは、ある時点で spambots の犠牲になります。それをどのように扱うかは顧客に影響を与える可能性があり、ほとんどのソリューションは一部の人々がフォームに記入するのを思いとどまらせることができます。

これがハニーポット技術の出番です。ユーザーにキャプチャを入力させたり、フォームに入力するために他のフープをジャンプさせることなく、スパムボットを無視できます。

この投稿は、他の人がウェブサイトのフォームにハニーポットトラップを実装するのを純粋に支援するためのものです。


更新:

クライアントのすべてのウェブサイトに以下のハニーポットを実装して以来、すべてのスパムの99.5%(数千件の送信)をブロックしました。これは、すぐに実装される「高度な」セクションで説明した手法を使用しない場合です。

47

概念

スパムボットのみが見ることができる非表示フィールドをフォームに追加することにより、スパムボットであり、実際のエンドユーザーではないことを明らかにさせることができます。

HTML

<input type="checkbox" name="contact_me_by_fax_only" value="1" style="display:none !important" tabindex="-1" autocomplete="off">

ここに簡単なチェックボックスがあります:

  • CSSで隠されています。
  • あいまいですが、明らかに偽の名前です。
  • 0に相当するデフォルト値があります。
  • オートコンプリートで埋めることはできません
  • 経由で移動できません Tab キー。 ( tabindex を参照)

サーバ側

サーバー側では、値が存在し、0以外の値を持っているかどうかを確認し、そうであれば適切に処理します。 これには、試行および送信されたすべてのフィールドのロギングが含まれます。

PHPでは、次のようになります。

$honeypot = FALSE;
if (!empty($_REQUEST['contact_me_by_fax_only']) && (bool) $_REQUEST['contact_me_by_fax_only'] == TRUE) {
    $honeypot = TRUE;
    log_spambot($_REQUEST);
    # treat as spambot
} else {
    # process as normal
}

後退する

これがログの出番です。何らかの理由でユーザーの1人がスパムとしてマークされた場合、ログは失われた情報を回復するのに役立ちます。また、ハニーポットを回避するために将来変更された場合、サイトで実行されているボットを調査することもできます。

報告

多くのサービスでは、APIを介して、またはリストをアップロードすることにより、既知のスパムボットIPを報告できます。 ( CloudFlare など)見つかったすべてのスパムボットとスパムIPを報告することにより、インターネットをより安全な場所にしてください。

高度な

より高度なスパムボットを厳しく取り締まる必要がある場合は、さらにいくつかのことができます。

  • ハニーポットフィールドをプレーンCSSの代わりにJSのみで非表示にします
  • 実際に使用しない現実的なフォーム入力名を使用します。 (「電話」や「ウェブサイト」など)
  • ハニーポットアルゴリズムにフォーム検証を含めます。 (ほとんどのエンドユーザーは、1つまたは2つのフィールドのみを誤って取得します。通常、スパムボットはほとんどのフィールドを誤って取得します)
  • 既知のスパムIPを自動的にブロックするCloudFlareなどのサービスを使用します
  • フォームのタイムアウトを設定し、すぐに投稿できないようにします。 (ページの読み込みから3秒以内に送信されたフォームは通常スパムです)
  • IPが1秒間に複数回投稿しないようにします。
  • その他のアイデアについては、こちらをご覧ください: 「核」ハニーポットを作成してフォームスパマーをキャッチする方法
91

非オートコンプリートを実際に強制するための1つの提案:
change autocomplete="off" by autocomplete="nope" OR autocomplete="false"

指定された値は有効な値ではないため(autocompleteの値はonまたはoffのみであるため)、ブラウザーはフィールドへの入力を停止します。

詳細については、 フォームのオートコンプリートをオフにする方法

お役に立てれば。

シャ:)

9
LebCit

ここでの提案のわずかな(しかし単純な)バリエーションが、コンタクトフォームハニーポットの有効性に大きな違いをもたらすことがわかりました。要するに、隠しフィールドをテキスト入力に変更し、ボットにパスワードだと思わせます。このようなもの:

<input type="text" name="a_password" style="display:none !important" tabindex="-1" autocomplete="off">

このモックパスワードの入力は、チェックボックスの例と同じ基本的なガイドラインに従っていることに注意してください。そして、実際のパスワード入力とは対照的に、テキスト入力はうまく機能するようです。

この明らかに小さな変更により、スパムが大幅に減少しました。

5
yodarunamok