2009-08-06 2 views
3

私はユーザーが記入して情報をサーバーに送信し、データベースに保存したWebフォームを持っています。私はロボットがフォームに記入するだけかもしれないと心配しています。私は無駄なレコードでいっぱいになるデータベースで終わるでしょう。どのように私のフォームに記入するロボットを防ぐことができますか?私はStackoverflowのロボット検出のようなものかもしれないと思っています。あなたがロボットだと思ったら、あなたがそうでないことを確認するよう求めます。 Perl、Java、またはPHPでサーバー側のAPIはありますか?ロボットが情報を入力しているかどうかを確認する方法

答えて

10

いくつかの解決策があります。

  1. キャプチャを使用します。私が知る限り、SOはreCAPTCHAを使用しています。

  2. フォームに余分なフィールドを追加し、CSS(display:none)で非表示にします。通常のユーザーはこのフィールドを表示しないため、このフィールドは入力されません。このフィールドが空であれば、送信時にチェックします。そうでない場合は、すべてのフォームフィールドに注意深く記入したロボットを扱っています。この技術は、通常「ハニーポット」と呼ばれます。

  3. JavaScriptタイマー機能を追加しました。ページのロード時に、ゼロで値が開始され、時間の経過とともに値が増加します。通常のユーザーは、しばらくあなたのフォームを読んで記入し、提出するだけです。ロボットは、受け取った直後にフォームに記入して提出するだけです。提出時に値がゼロから大きく外れているかどうかをチェックします。もしそれがあれば、それは本当のユーザだろう。数秒間(またはJavaScriptを実行していないロボットのために値が全くない場合)は、おそらくロボットです。ただし、これは「書き込み」操作を実行するためにJavaScriptをオンにする必要があると判断した場合にのみ機能します。

確かに他の手法があります。しかし、これらは非常に簡単で効果的です。

+0

#3の潜在的な問題は、ほとんどのロボットがページ上でJavascriptを実行しないため、タイマーからの値がないことです。私は1と2で大きな成功を収めました。 – friedo

+0

@riedo:あなたは正しいです、私は実際にこの状況を正確に意味しました。タイマーから値が得られない場合は、ロボットかユーザーがJavaScriptをオフにしていることを意味します。著者が自分のサイトで「書き込み」操作を実行するためにJavaScriptをオンにする必要があると判断した場合、このアプローチはうまくいく可能性があります。 –

5

reCAPTCHA(stackoverflowと同じ)を使用することができます - それらは多くのプログラミング言語でlibrariesを持っています。

2

キャプチャは素晴らしいです。あなたが行うことができるもう1つのことは、ロボットトラフィックの99%を防ぎますが、ユーザがフィールドを検証するのを邪魔することはありません。

私のサイトでは、郵便番号と電話番号のようなフィールドのテキストをチェックします。これにより、対象外のロボットに関する誤った情報がすべて削除されました。

4

私はいつもハニーポットのcaptcha(article by phil haack)をユーザーにあまり浸透させたくありません。

3

キャプチャはアクセシビリティの問題をもたらし、最終的にソフトウェア認識によって敗北します。

私は、この提案のshort articleに、隠しフィールドを含むボットトラップについて、Matthew VinesやNew in townの提案をお勧めします。

とにかく、キャプチャとボットの両方のトラップを自由に使用できます。

0

ユーザーがフォームに記入する2ステップシステムを作成できますが、電子メールに返信して一定時間(たとえば24時間)以内にレコードを「アクティブ化」する必要があります。

バックエンドでは、現在の表にすべてのフォーム提出を入力するのではなく、時間割り当てよりも古い行を自動的に削除する一時表にそれらを入れることができます。あなたが深刻なボットの問題を抱えていない限り、私はテーブルがそれほど大きくないと思うでしょう、特に最初のフォームがほんの数フィールドであれば。

このアプローチの利点は、キャプチャやアクセシビリティの問題を引き起こす可能性のあるその他のテクノロジーを使用する必要がないことです。

+0

電子メールの有効化は、ボット登録の最初の解決策の1つですが、それほど効果的ではありません。悪いニュースは:ボットは電子メールを読むことができます。あなたのWebサイト用のボットを書くことに強いインセンティブがある場合、ボットがアクティベーション電子メールの右のリンクに順応するまでに時間がかかりません。 – christopheml

+0

うわー、それを知らなかった。したがって、電子メールが電子メールボックスに送信されても​​、ボットはそのボックスから電子メールを読み取り、その電子メールのリンクを見つけて(プレーンテキストの電子メールであっても)追跡できますか? –

関連する問題