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

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

Source: https://habr.com/ru/post/J135209/


All Articles