ボット/スパムと戦うためにフォームにハニーポットフィールドを追加することについて読んでいます。唯一の問題は、どこから始めればよいかについてのガイドや何かがないことです。多くのサイトは、スパムボットだけが入力する非表示のフィールドを作成すると言っています。しかし、私はこれに慣れていないので、アプリケーションのどこから始めればよいかわかりません。誰かがこれを設定する方法についてアドバイスをくれますか?Devise登録ページでハニーポットフィールドを使用できるようにしようとしています。
5 に答える
ハニーポットキャプチャの背後にある基本的な考え方は、「フォーム」、「メール」、「コンテンツ」などの名前の非表示の(CSS経由の)フィールドがあり、(フィールド名を読み取るだけのボットにとっては)入力する必要があるように見えることです。次に、サーバーが送信を確認するときに、これらの非表示フィールドが空白であることを確認します。そうでない場合は、投稿にボットのフラグを付けます。
これはよく説明された例(ASPのコードを含む)であり、ハニーポットキャプチャを提供するRailsGemです。
私がリンクしたRailsGemは、一度インストールすると非常に使いやすいように見えます。
<% form_tag comments_path, :honeypot => true do -%>
...
<% end -%>
単に実装するのではなく、アプローチについて学ぶことに興味がある場合は、自分でアプローチすることをお勧めします。自分でローリングする場合は、フィールドがCSS(または他のスタイル/ポジショニングトリック)によって非表示になっていることを確認することが重要です。input type="hidden"
そうしないと、ボットがフィールドに入力しない可能性があります。
Michael Miorがコメントで指摘したように、非表示フィールドの横に空白のままにするようにユーザーに指示するメッセージを表示することが重要です。そうしないと、スクリーンリーダーを使用しているユーザーが誤って入力する可能性があります。したがって、アクセス可能なWebサイト(ほぼ確実にそうする必要があります)を作成している場合は、それを変更するか、独自のWebサイトを作成する必要があります。
このトリックは絶対確実ではないことに注意してください-ボットがページをレンダリングし、入力する前に実際にユーザーに表示されるフィールドを決定することを妨げるものはありません-しかし、その種のボットは、見たばかりのボットよりもかなり複雑になりますフォームhtmlで。ハニーポットキャプチャは、単純なボットを阻止するのに非常に効果的である可能性があります。
invisible_captchaを試してください(Rails 3、4、5をサポート)。
シンプルで柔軟なアプローチで、中小規模の(トラフィックの観点から)サイトで非常にうまく機能します。また、時間に敏感な提出物を提供します。
基本的な使い方
あなたのフォームで:
<%= form_for(@topic) %>
<%= invisible_captcha %>
...
<% end %>
コントローラ内:
class TopicsController < ApplicationController
invisible_captcha only: [:create, :update]
...
end
HTML -
<input type="text" name="verifyEmail" id="verifyEmail">
PHP Validation -
if(strlen($_POST['verifyEmail']) > 0){
header('location: {some redirect URL here..}'); //Send them way away from your form :)
die(); //Stop execution of the script
}
CSS -
#verifyEmail{
position:fixed;
visibility: hidden;
top:-500px; left:-500px;
}
dislplay: none;
HTMLでボットに表示されない(ソースを表示して試してください)
visibility: hidden; left:-500px; top:-500px;
(ソースを表示すると表示されます)
しばらくの間display:noneハニーポットを使用しましたが、フィールドがソースコードに表示されないことがわかったときに、可視性オプションに切り替えました。インラインスタイルではなく、CSSのクラスまたはIDを使用して実行します。ほとんどのボットは通常すべてのフィールドに入力するため、ラベルを使用してユーザーに通知することをお勧めします。名前はそれほど重要ではありません。
確かにすべてをキャッチするわけではありませんが、基本的な数学のキャプチャと一緒に使用すると非常に効果的です。
今、自分のサイトで100%機能するものを共有します。
ほぼ1週間、「スパムボット」と「ブルートフォース登録」と呼ばれる多数の偽のユーザーが偽のユーザーになるのを防ぐ方法をテストしてきました。
登録フォームで、ハニーポットまたは隠しフィールドと呼ばれるものを適用する多くの方法をインターネットで見つけることができます。
このトリックの目的は、偽の登録をだますことです。これは、常に非表示のフィールドにデータを入力するため、登録プロセスがDIEになり、偽の登録が防止されるためです。
ここで、このトリックの多くのバリエーションがインターネット上で見つかることに言及し、コードが2日間100%動作していると見積もられている理由を説明します。これにより、すべてのスパムボットとすべてのブルートフォース登録が停止しました。
秘訣は、パスワードや郵便番号などの一般名を使用するとボットがキャッチするため、「field1」のような名前でフィールドを非表示にする方法です。field1やautocomplete = offのような名前を使用すると、BOTSにフィールドへの入力を強制しますまた、フィールドの目的を判別できないため、登録の試行を強制終了するデータが入力され続けます。
下の画像は、登録フォームで使用したコードを示しています。
<input type="text" name="field1" style="display:none !important" tabindex="-1" autocomplete="off">
以下の画像は、データがフィールドに入力された場合に登録を強制終了するコマンドを処理するPHPフォームに配置したコードを示しています。
if(!empty($_POST['field1'])) die();
過去48時間の間、このコードはゼロスパムボットとゼロブルートフォース登録をもたらしました。AFFAソーシャルで私たち全員からお楽しみください
このコードを手動でテストする場合は、上記の登録フォームコードからstyle = "display:noneを削除してください。非表示フィールドにデータを入力して登録してから登録が終了します。フィールドからデータを削除すると、登録が終了します。つづきます。
<div id="honeypotdiv">
If you see this, leave it blank. Only bots should see this
<input type="text" name="body" value="" />
</div>