私はユーザーが記入して情報をサーバーに送信し、データベースに保存したWebフォームを持っています。私はロボットがフォームに記入するだけかもしれないと心配しています。私は無駄なレコードでいっぱいになるデータベースで終わるでしょう。どのように私のフォームに記入するロボットを防ぐことができますか?私はStackoverflowのロボット検出のようなものかもしれないと思っています。あなたがロボットだと思ったら、あなたがそうでないことを確認するよう求めます。 Perl、Java、またはPHPでサーバー側のAPIはありますか?ロボットが情報を入力しているかどうかを確認する方法
答えて
いくつかの解決策があります。
キャプチャを使用します。私が知る限り、SOはreCAPTCHAを使用しています。
フォームに余分なフィールドを追加し、CSS(display:none)で非表示にします。通常のユーザーはこのフィールドを表示しないため、このフィールドは入力されません。このフィールドが空であれば、送信時にチェックします。そうでない場合は、すべてのフォームフィールドに注意深く記入したロボットを扱っています。この技術は、通常「ハニーポット」と呼ばれます。
JavaScriptタイマー機能を追加しました。ページのロード時に、ゼロで値が開始され、時間の経過とともに値が増加します。通常のユーザーは、しばらくあなたのフォームを読んで記入し、提出するだけです。ロボットは、受け取った直後にフォームに記入して提出するだけです。提出時に値がゼロから大きく外れているかどうかをチェックします。もしそれがあれば、それは本当のユーザだろう。数秒間(またはJavaScriptを実行していないロボットのために値が全くない場合)は、おそらくロボットです。ただし、これは「書き込み」操作を実行するためにJavaScriptをオンにする必要があると判断した場合にのみ機能します。
確かに他の手法があります。しかし、これらは非常に簡単で効果的です。
キャプチャは素晴らしいです。あなたが行うことができるもう1つのことは、ロボットトラフィックの99%を防ぎますが、ユーザがフィールドを検証するのを邪魔することはありません。
私のサイトでは、郵便番号と電話番号のようなフィールドのテキストをチェックします。これにより、対象外のロボットに関する誤った情報がすべて削除されました。
私はいつもハニーポットのcaptcha(article by phil haack)をユーザーにあまり浸透させたくありません。
キャプチャはアクセシビリティの問題をもたらし、最終的にソフトウェア認識によって敗北します。
私は、この提案のshort articleに、隠しフィールドを含むボットトラップについて、Matthew VinesやNew in townの提案をお勧めします。
とにかく、キャプチャとボットの両方のトラップを自由に使用できます。
ユーザーがフォームに記入する2ステップシステムを作成できますが、電子メールに返信して一定時間(たとえば24時間)以内にレコードを「アクティブ化」する必要があります。
バックエンドでは、現在の表にすべてのフォーム提出を入力するのではなく、時間割り当てよりも古い行を自動的に削除する一時表にそれらを入れることができます。あなたが深刻なボットの問題を抱えていない限り、私はテーブルがそれほど大きくないと思うでしょう、特に最初のフォームがほんの数フィールドであれば。
このアプローチの利点は、キャプチャやアクセシビリティの問題を引き起こす可能性のあるその他のテクノロジーを使用する必要がないことです。
電子メールの有効化は、ボット登録の最初の解決策の1つですが、それほど効果的ではありません。悪いニュースは:ボットは電子メールを読むことができます。あなたのWebサイト用のボットを書くことに強いインセンティブがある場合、ボットがアクティベーション電子メールの右のリンクに順応するまでに時間がかかりません。 – christopheml
うわー、それを知らなかった。したがって、電子メールが電子メールボックスに送信されても、ボットはそのボックスから電子メールを読み取り、その電子メールのリンクを見つけて(プレーンテキストの電子メールであっても)追跡できますか? –
- 1. 入力パスワードが正しいかどうかを確認する
- 2. 入力がCであるかどうかを確認する方法は?
- 3. 入力が配列内にあるかどうかを確認する方法
- 4. ユーザー入力が特定の文字かどうかを確認する方法
- 5. .exeファイルに入力パラメータが必要かどうかを確認する方法
- 6. Ada:入力が列挙型かどうかを確認する方法
- 7. すべての入力フィールドをチェックしてフォームが空であるかどうかを確認する方法
- 8. 入力がまだ空であるかどうか再確認する方法
- 9. ユーザーが何も入力していないかどうかを確認する方法は?
- 10. jQueryエレガントな方法すべての入力フィールドが明確であるかどうかを確認する
- 11. 入力がリンクであるかどうかを確認してください
- 12. 入力テキスト、ラジオ、選択ボックスがすべて入力されているかどうかを確認します。
- 13. コンソールウィンドウに何かが入力されているかどうかを確認する方法は?
- 14. 入力ブロブが存在するかどうか確認してください
- 15. stderrが出力をファイルに出力しているかどうかを確認する方法は?
- 16. 各ボックスに値が入力されているかどうかを確認する方法
- 17. HTML5入力がサポートされているかどうかを確認する方法は?
- 18. 入力された電子メールに "@"が含まれているかどうかを確認する方法
- 19. 入力フィールドに分度器テストの値が含まれているかどうかを確認する方法
- 20. フォームのフィールドに値が入力されているかどうかを確認する方法は?
- 21. DataGridviewセルの内容値が手動で入力されているかどうかを確認する方法
- 22. 入力フィールドの1つが入力されているかどうかを確認します
- 23. ANTLRコモンツリーが正しいかどうかを確認するか、入力がANTLR文法に一致するかどうかをチェックする方法?
- 24. PAMモジュールからの情報を入力する方法
- 25. HealthKitが承認されているかどうかを確認する方法
- 26. ブラウザがotfをサポートしているかどうかを確認する方法
- 27. WebBrowserがエラーページをナビゲートしているかどうかを確認する方法?
- 28. MS Access Query:フォームが開いているかどうかを確認する/パラメータに入力が必要かどうかを確認する
- 29. jQueryですべての入力が空でないかどうかを確認する方法
- 30. ユーザーがログインしていて、その情報を保存する方法を確認する方法? (React)
#3の潜在的な問題は、ほとんどのロボットがページ上でJavascriptを実行しないため、タイマーからの値がないことです。私は1と2で大きな成功を収めました。 – friedo
@riedo:あなたは正しいです、私は実際にこの状況を正確に意味しました。タイマーから値が得られない場合は、ロボットかユーザーがJavaScriptをオフにしていることを意味します。著者が自分のサイトで「書き込み」操作を実行するためにJavaScriptをオンにする必要があると判断した場合、このアプローチはうまくいく可能性があります。 –