Home Blog Security 会員サイトの不正登録を防止!BuddyPress-Honeypotの設定方法

会員サイトの不正登録を防止!BuddyPress-Honeypotの設定方法

1.危険!サイトの不正登録

会員サイトを運営していると、急に会員登録者が増えることがあります。
特に何もしていないのに、海外の登録者が増えたら、クラッカーを疑った方が良いでしょう。

彼らは、他のサイトで公開してあるGmailを勝手に利用し、新規登録者になりすまして侵入してきます。
しかも、正規のユーザーと見分けがつきにくく、不正アクセス対策が通用しません。

一度登録すると、彼らは普通の会員のようにふるまいつつも、他の会員へ詐欺サイトへ誘導します。
サイトにECもある場合、彼らはクレジットカード情報を抜き取って不正注文し、購入した商品をダークウェーブで転売するなど、手の込んだ攻撃をしてきます。

2.reCHAPTCHAでも防げない

会員サイトは、WordPressのプラグイン「BuddyPress」で簡単に作ることができます。
一方でクラッカーから攻撃されやすく、適切な対策をしないとかえって危険性が大きくなります。

例えば、reCAPTCHAは日本人に人気のセキュリティ対策です。
Invisible reCAPTCHAプラグインであれば、無料でreCAPTCHAを使え、安全にサイト運用できると言われています。

しかし、これは間違っています。
reCAPTCHAは不正アクセスに効果がありますが、不正登録には効果がありません。

reCAPTCHAは、画像認証で不正なプログラムがアクセスできないようGoogleが設計したシステムです。
この不正なプログラムは、「ブログコメント」や「会員登録」にアクセスし、詐欺サイトのURLのあるスパムコメントを書きます。
これがreCAPTCHAを設置すると、スパムコメントを書かれることはなくなります。

ところが、reCAPTCHAは不正なプログラムを完全にブロックしている訳ではありません。
現にクラッカーはreCAPTCHAを破るプラグラムを開発しており、その気になれば簡単にすり抜けられるからです。
特に会員登録のreCAPTCHAは簡単に破られます。事実、筆者は何度も不正登録をされました。

ではなぜ、ブログコメントと会員登録でreCAPTCHAの効果が違うのでしょうか?
それは「クラッカーの攻撃の狙い」にあります。

ブログコメントでは不正アクセスを通して、詐欺URLに誘導することが狙いです。
詐欺URLへの誘導は、「今回が上手くいかなかったら次」と波状攻撃を仕掛ければ済むことです。
ブログコメントは沢山ありますから、無理をして特定のページのreCAPTCHAを破る必要はありません。

一方、不正登録はサイト内に侵入して、重要データやアカウントにアクセスすることが狙いです。
これは当たれば利益が大きいため、何としても登録をしなければなりません。

従って、結果的にreCAPTCHAは不正登録対策に効果がないのです。

3.BuddyPress-Honeypotプラグインで対策しよう!

BuddyPress-Honeypotとは、BuddyPressによる会員サイトのセキュリティ対策プラグインです。
主に次の流れでクラッカーを判定します。

  1. CSSを介して非表示の追加のテキストフィールドを作成します
    1. ビューから非表示になっているため、ユーザーには表示されたり、入力されたりすることはありません。
    2. スパムロボットは通常、すべてのフォーム要素に入力するため、必須フィールドを見逃すことはありません
  2. 送信時に、非表示のテキスト入力をチェックして、値があるかどうかを確認します。
    もしそうなら、それはスパマーです。

※BuddyPress-Honeypotは、ここからプラグインをダウンロードできます。

以下、コードの説明です。
まず「bp_after_signup_profile_fields」BuddyPressアクションを利用し、非表示のテキストフィールドを追加します。

<?php

// Hook into the BuddyPress registration form
add_action( 'bp_after_signup_profile_fields', 'add_honeypot' );

/**
 * Add a hidden text input that users won't see
 * so it should always be empty. If it's filled out
 * we know it's a spambot or some other hooligan
 */
function add_honeypot() {
	echo '<div style="display: none;">';
	echo '<input type="text" name="oh_no_you_dint" id="sucka" />';
	echo '</div>';
}

次に、「bp_core_validate_user_signup」フィルターを使用して入力が空かどうかを確認し、入力されている場合はエラーを返します。残りはBuddyPressとWordPressが処理します。

<?php

// Validate the input
add_filter( 'bp_core_validate_user_signup', 'check_honeypot' );

/**
 * Check to see if the honeypot field has a value.
 * If it does, return an error
 */
function check_honeypot( $result = array() ) {
	global $bp;

	if( isset( $_POST['oh_no_you_dint'] ) && !empty( $_POST['oh_no_you_dint'] ) )
		$result['errors']->add( 'pjbp_honeypot', __( "You're totally a spammer. Go somewhere else with your spammy ways." ) );
		
	return $result;
}

4.まとめ

今回はBuddyPress-Honeypotについて紹介しました。セキュリティ対策は、状況に沿って適切な対策を行うことが大事です。
ぜひ、ご自身で試してみて、自分にあった最適な方法を見つけ出してみてください。

You may also like

コメントを残す

Guest
Online
arrow_drop_down

Powered by WSchat