3

ユーザーが入力し、情報をサーバーに送信してデータベースに保存する Web フォームがあります。ロボットがフォームに入力するだけで、役に立たないレコードでいっぱいのデータベースになってしまうのではないかと心配しています。ロボットがフォームに入力するのを防ぐにはどうすればよいですか? Stackoverflow のロボット検出のようなものを考えています。ロボットであると判断した場合、ロボットではないことを確認するように求められます。Perl、Java、または PHP にサーバー側 API はありますか?

4

6 に答える 6

10

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

  1. CAPTCHA を使用します。SOは私の知る限りreCAPTCHAを使用しています。

  2. フォームにフィールドを追加し、CSS (display:none) で非表示にします。通常のユーザーにはこのフィールドは表示されないため、入力しません。このフィールドが空の場合は、送信時に確認します。そうでない場合は、すべてのフォーム フィールドに慎重に入力したロボットを扱っています。この手法は通常、「ハニーポット」と呼ばれます。

  3. JavaScript タイマー機能を追加します。ページの読み込み時にゼロから値を開始し、時間の経過とともに値を増やします。通常のユーザーは、フォームを読んで入力し、しばらくしてから送信します。ロボットは、フォームを受信するとすぐに入力して送信します。送信時に値がゼロから大幅に変化したかどうかを確認します。持っている場合は、実際のユーザーである可能性があります。数秒しか表示されない場合 (または、ロボットが JavaScript を実行していないために値がまったく表示されない場合) は、ロボットである可能性があります。ただし、これは、ユーザーが「書き込み」操作を実行するために JavaScript をオンにする必要があると判断した場合にのみ機能します。

確かに他のテクニックがあります。しかし、これらは非常にシンプルで効果的です。

于 2009-08-06T14:39:26.427 に答える
5

reCAPTCHA (stackoverflow と同じ)を使用できます。多くのプログラミング言語用のライブラリがあります。

于 2009-08-06T14:35:09.647 に答える
4

ユーザーへの侵襲性が低いため、私は常にハニーポット キャプチャ ( phil haack による記事) を好んでいました。

于 2009-08-06T14:37:42.793 に答える
3

キャプチャはアクセシビリティの問題を引き起こし、最終的にはソフトウェア認識によって打ち負かされます。

マシュー・ヴァインズとニュー・イン・タウンがすでに示唆しているように、隠されたフィールドを含むボットトラップに関するこの短い記事を読むことをお勧めします。

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

于 2009-08-06T15:28:10.730 に答える
2

CAPTCHAは素晴らしいです。ロボット トラフィックの 99% を防ぎながら、ユーザーを煩わせることなくできるもう 1 つの方法は、フィールドを検証することです。

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

于 2009-08-06T14:37:12.717 に答える
0

ユーザーがフォームに入力する2段階のシステムを作成できますが、その後、電子メールに返信して、設定された期間(たとえば、24時間)内にレコードを「アクティブ化」する必要があります。

バックエンドでは、現在のテーブルにすべてのフォーム送信を入力する代わりに、それらを一時テーブルに配置して、時間の割り当てよりも古い行を自動的に削除することができます。ボットに深刻な問題がない限り、特に最初のフォームがほんの数フィールドの場合、テーブルはそれほど大きくならないだろうと思います。

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

于 2009-08-06T19:12:54.117 に答える