顧客が簡単に連絡できるように、簡単な連絡フォームをWebサイトに追加したいと思います。
<form>
NAME
<input type='text' name='name' />
EMAIL
<input type='text' name='email' />
MESSAGE
<textarea name='message' />
<input type='submit' />
</form>
このフォームは、単に顧客のメッセージを私にメールで送信します。
しかし、私はスパムも減らしたいと思っています(排除すると言っているのではなく、少なくとも減らすと言っています)。
CAPTCHAの使用を検討しましたが、最終的には、追加情報を入力する必要があることで顧客の邪魔をしたくありません。
お問い合わせフォームに使用できる、簡単なスパム防止/削減方法のアイデア。
私が驚くほど良い成功率で使用している非常に単純なトリックはこれです:style="display: none"
で人間のユーザーから隠されているが、email
のような魅力的な名前でテキストフィールドを提供します。ほとんどのボットはこのフィールドに何かを入力しますが、人間はそれを見ることができないため、見えません。サーバーでは、フィールドが空であることを確認してください。そうでない場合は、送信をスパムとして扱います。
CAPTCHAタイプのユーザー確認以外の唯一の(クライアント側の)方法は、すべてを動的に書き込むことです。多くの(すべてではありませんが)ロボットはおそらく動的コンテンツを無視します。例えば
document.write("<"+"form>"
+" NAME "
+" <"+"input type='text' name='name' /> "
+"EMAIL "
+"<"+"input type='text' name='email' /> "
+"MESSAGE "
+"<"+"textarea name='message' /> "
+"<"+"input type='submit' /> "
+"<\/form> ");
完全にフロントエンドのソリューションを実行したい場合は、最近、フォームのアクション属性を空白のままにして、$(document).ready関数を介してデータを入力することで成功しました。ほとんどのスパムボットは、JavaScriptが無効になっているブラウザを使用しているか、検出を回避するために非表示のフィールドを探しています。
例:
あなたのhtmlは次のようになります:
<form method="POST" action="" id="contact-form">
そのページのどこにでも、これを使用してデータを入力できます。
<script>
$(document).ready(function(){
$("#contact-form").attr("action", "/yourMailScript.cgi");
});
</script>
Javascriptのないボットブラウザはフォームアクションを取得せず、送信時に404を取得します。通常のブラウザを使用している人は誰でも(偏執的な理由でJSが無効になっていない限り)、通常の動作をします。
GoogleまたはYahooのメールアカウントを使用します。彼らは良いアンチスパムフィルターを持っています。
隠しフィールド、ばかげた質問(3 + 4とは何ですか?)などは、フォーム上のスパムをブロックするのにあまり効果的ではありません、IMHO。
私はこれを数年前に調査し、「FormSpammerTrap」と呼ばれるソリューションを思いつきました。 JavaScriptコードを使用して、必須フィールドのフォーカス/オンクリックを「監視」します。自動化されたプロセスは、特定のサイト用に高度にカスタマイズされていない限り(スパムボットの所有者が望むよりも時間がかかる)、必須フィールドに「フォーカス/クリック」することはできません。 (そして私が使用する他のいくつかのテクニックがあります。)
www.FormSpammerTrap.com サイトに無料のソリューションがあります。そして、そこにはスパムボットがスパムを試みることができるフォームがあります...そして彼らは3年以上もそうしていません。ぜひお試しください...すべてオープンソースなので、どのように機能するかを確認できます。 (そして、あなたがフォームを使用する場合、私はあなたの電子メールを収集しません。私は一度返信してからあなたの電子メールを削除します。)
私のテクニックは、スパムボット、IMHOをブロックするのにはるかに効果的です。彼らはそのサイトの連絡フォームをスパムボットすることができませんでした。
** 2018年7月12日追加**トリックは、アクションパラメータを実際の処理ページに変更するオンクリック/オンフォーカスイベントを追加することです。それ以外の場合、私が使用するデフォルト値はハニートラップタイプのサイトです。スパマーがこれらのイベントをシミュレートするのは難しいと思いますが、おそらく可能です。この手法は、多くのボットスパマーをブロックします。
それでも、そのサイトでこの手法を使用して数年経っても、フォームはボットによってスパムされていません。 (私は、1つの送信だけでなく、攻撃を介して複数の送信を送信するボットスパマーを定義します。)
私のために働きます。
JSテクノロジーを使用します。ユーザーが連絡先ページにアクセスした場合と同様に、javascriptは文字列などを生成し、情報を非表示のテキストフィールドに配置します。しかし、それは実際の解決策ではなく、スマートボットは簡単にそれを解読することができます。
もう1つの方法は、お問い合わせフォームの送信後にメール確認を使用することもできます。そして、データベースにデータを保存します。顧客が電子メールでURLを確認すると、連絡先情報がデータベースからメールで送信されます。
また、遅延を使用して、ロボットの継続的な攻撃を防ぎます。 PHPコードのsleep()
のように。これにより、コードにわずかな遅延が追加されます。これにより、ランダムな攻撃を減らすことができますが、これは防止方法ではありません。
AkismetやCleantalkなどのスパム対策APIを使用します。 APIにアクセスする前に、あまり洗練されていないボットに対して従来のチェックを使用できます。スパム対策APIは、人間から送信されたスパムをキャッチする唯一の方法です。
このページで素敵なアイデアを見つけました:
http://www.evengrounds.com/developers/alternatives-to-captcha
送信ボタンに確認ページを表示させることができます。このページでは、実際にメッセージを送信するには、確認ボタンを押す必要があることをユーザーに説明します。スパムロボットは通常、最初のフォームのみを送信し、2番目のステップをスキップします。
uRIメソッド、urlencoded文字、または2つのHTMLマークアップ文字のgrepは機能しているようです。
あなたは簡単な質問を追加することができます、あなたに連絡したいそれぞれの真面目な人は簡単に答えることができます。たとえば、ドメインの最初の文字を入力する必要があるフィールド。ほとんどのボットは質問を理解せず、何も入力しないか、ランダムに入力します。
また、ユーザーがデータを入力する必要がある時間を追跡することもできます。最初の単語を入力する前に5秒より前にフォームを送信しようとした場合は、送信を許可しないでください。ボットは通常、サイトを解析し、すべてに入力してから投稿し、次のWebサイトに移動します。
#sec {
visibility: hidden;
padding: 0;
margin: 0;
height: 1;
}
<form method="POST" action="www.google.com">
NAME
<input type='text' name='name' />
<br /> EMAIL
<input type='text' name='email' />
<br /> MESSAGE
<textarea name='message' /></textarea>
<br />
<input type='text' name='security' id='sec' placeholder="Do not enter anything here" />
<input type='submit' formaction="" />
</form>
**ここでは、送信ボタンをクリックしたユーザーのみが実際にフォームを送信できます。自動送信を使用すると、ボットがgoogle.comにリダイレクトされるだけです。 ****
*また、入力「セキュリティ」は、ユーザーには非表示で、HoneyPotCaptchaとして一般に知られている特定のボットに表示される入力フィールドです。サーバー側では、「セキュリティ」フィールドが入力されているすべてのリクエストをスキップできます。すべてのボットがこのようにだまされるわけではありません。ここで属性formaction
が機能します*