CAPTCHAなしでスパムからWebフォームを保護する-2:Botobor

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は次のチェックを使用します。







デフォルトでは、すべてのチェックが使用されますが、開発者はそれらのいずれかを無効にすることができます。





簡単な例


フォームを作成するコードのスニペット:

'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()メソッドの呼び出し中に行われます。



誰かが重宝してくれたら嬉しいです。



All Articles