スパマーからフォームを保護する簡単なハニーポットの作成方法
この投稿は短くて役に立つと思います。 ここでの目標は、Web サイトのフォームを攻撃する可能性のあるスパマーやボットをブロックするのに役立つ簡単なテクニックを示すことです。 これは、スパム防止のための追加レイヤーであり、メインのリソースではありません。 re などの他のツールと一緒に使ってください。
次のようなフォーム構造があるとします。
<form action="/myformaction"> <label for="name">Your Name</label> <input type="text" name="name" placeholder="Your name here" required maxlength="100"> <label for="email">Your E-mail</label> <input type="email" name="email" placeholder="Your e-mail here" required></form>
ほとんどの単純なボットは、ラベル名、入力 ID、入力共通属性、必須フィールドなどのフォーム共通パターンを検索し、ボットに偽の情報を入力させてスパムや不正なコードを送信しようとします。 検索対象となる最も一般的なフィールドは、「電子メール、電話、住所」などのフィールドです。
そこで、フォームの構造を次のように変更して、簡単なハニーポットを作成します。 .ohnohoney クラスです。 一部のボットは display:none のフィールドにアクセスできず、他のボットは単に display:none のフィールドを埋めてはいけないことを知っています。 クラス名に「hidden」を使用しないでください。一部の高度なボットはそれを認識できます。
次に、「リアル フィールド」を作成しました。 これは目に見えるフィールドで、データの面でバックエンドに関連するものでなければなりません。 このフィールドは、識別子をハッシュに変更する必要があります。 一般的には「nameHASH」というパターンで統一している。 name-hash」やそのバリエーションは使わないでください。単純に分割すると、本当のフィールド名がわかってしまいます。 これで、ボットはこのフィールドが何であるかを認識できなくなり、ただ、フォームに入力しなければならないフィールドがあること、おそらくパターンとして「タイプ」に従っていることだけがわかる。 重要なこと ラベルを空にし、「ohnohoney」クラスを使って偽の入力をすべて隠します。 偽の入力は、できるだけシンプルで、一般的で、魅力的なものにしましょう。 Eメール、電話、名前など、シンプルで一般的な名前を使い、オートコンプリートを無効にし(ブラウザが入力しないように)、ルールを無効にして、タイプはそのままにしておきます。
さて、フォームには 2 つの部分があります。 ハッシュと奇妙な名前 (ハッシュと奇妙な名前は好きなように実装できます) で保護された入力のある実際のフィールドです。 そしてハニーポット(ハニーポットとは書かない。認識されないように文字を分割するのが望ましい)。 さて、バックエンドで
- “h o n e y p o t” フィールドのいずれかが埋まったかどうかを確認する。 もし「はい」なら、おめでとうございます、あなたはスパムを引っかけたのです。 ほとんどのスパムは、このフィールドを区別することなくすべて埋めてしまいます。 ですから、あなたがすべきことは、”h o n e y p o t “フィールドのいずれかが埋まっているかどうかを確認すること、もし埋まっていれば、そのスパムはスパムであるということです。 もし必要なら、ajaxフォームの場合、このチェックをクライアント側で行うこともできます。そうすれば、サーバーのリソースを無駄なデータの計算に使うことを避けられます(ただし、バックエンドのバリデーションは維持されます)。 スパムを検知したら、データを送信せず、そのデータでやりたいことをやればいいのです。 バックエンドにとって「email、phone」などの名前が重要な場合、配列を使って名前を転写します。
このテクニックのシンプルな実装を含む単一ファイルのレポはこちら:
https://github.com/felippe-regazio/php-honeypot-example
忘れないでください: これは簡単な方法で攻撃を防止するための単なる層です。 しかし、この単純なパターンにより、Web ページ内のスパムの少なくとも 50% を回避できると私は信じています。