3年前、
「フォームスパムボットブロッカー:CAPTCHAなしでWebフォームを保護する!」という記事がHabrに掲載され、スパムボットからフォームを保護するためのCAPTCHAのPHPとは根本的に異なるソリューションについて説明しました。 この決定は、Phil Haack-
Honeypot CaptchaおよびNed Batchelder-
Stopping spambots with hashs and honeypotsの記事で表現されたアイデアに基づいて
います 。 残念ながら、この記事で提案されたクラスはPHP4用に作成されたもので、2007年以降開発されていません。 PHP5の対応物に注目してください。
ボトボル
Botobor -PHP 5.0で作成されたライブラリで、Webフォームにロボットを入力しないように設計されています。 彼女が使用する方法は、人間の訪問者には見えません。
ロボットを識別するために、Botoborは次のチェックを使用します。
- REFERER値は、フォームが配置されているURLと一致しません。
- フォームの表示とその送信の間のギャップが小さすぎる(カスタマイズ可能);
- フォームの表示と送信のギャップが大きすぎます(カスタマイズ可能)。
- 餌場を満たす。
デフォルトでは、すべてのチェックが使用されますが、開発者はそれらのいずれかを無効にすることができます。
例
簡単な例
フォームを作成するコードのスニペット:'botobor.php' が必要です 。
...
//プロジェクトで提供されている方法でフォームのレイアウトを取得します。例:
$ html = $ form- > getHTML ( ) ;
//ラッパーオブジェクトを作成します。
$ bform = new Botobor_Form ( $ html ) ;
//新しいフォームレイアウトを取得します
$ html = $ bform- > getCode ( ) ;
フォームデータを処理するコードのフラグメント:'botobor.php' が必要です 。
...
if ( Botobor_Keeper :: isHuman ( ) )
{
//フォームは人によって送信され、処理できます。
}
フォームのカスタマイズ例
フォームを作成するコードのスニペット:// $ htmlにフォームコードを含めます
$ bform = new Botobor_Form ( $ html ) ;
//ベイトフィールドを無効にします
$ bform- > setCheck ( ' honeypots ' 、 false ) ;
// 2秒でフォームに入力するための下限を設定します
$ bform- > setDelay ( 2 ) ;
// 60分でフォームに入力するための上限を設定します
$ bform- > setLifetime ( 60 ) ;
$ html = $ bform- > getCode ( ) ;
それ以外の場合、すべては最初の例と同じです。
彼女の中には何がありますか?
Botborはフォームコードで何をしますか
コンストラクターでは、
Botobor_Form
はフォームのHTMLコードを受け入れます。 このコードでは、開始<form>タグの後に、フォームのメタデータとともに入力[type = hidden]を含む非表示(表示:なし)<div>が追加されます。 このメタデータには、フォームが作成された時刻、インストールされたオプションなどに関する署名された情報が格納されます。同じ非表示ブロックに、Botoborはベイトフィールドを挿入できます。
ベイトフィールズ
餌場は、自分の形を見つけるスパイダーロボットを捕まえるように設計されています。 このようなロボットは、原則として、フォーム内のなじみのあるフィールド(名前など)を探して入力します。 Botoborは、(CSSを使用して)個人から隠されているような名前のフィールドをフォームに追加できます。 人はこれらのフィールドを空のままにします(単純に表示されないため)。ロボットはそれを埋め、それによって自分を解放します。
デフォルトでは、次の名前のフィールドがフォームコードで検索されます:「name」、「mail」、「email」(リストはカスタマイズ可能)。 見つかったフィールドごとに、名前がランダムに生成された文字の組み合わせに変更され、CSSによって非表示になったフィールドが元の名前で作成されます。
名前の逆変換は、Botobor_Keeper :: handleRequest()またはBotobor_Keeper :: isHuman()メソッドの呼び出し中に行われます。
誰かが重宝してくれたら嬉しいです。