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による会員サイトのセキュリティ対策プラグインです。
主に次の流れでクラッカーを判定します。
- CSSを介して非表示の追加のテキストフィールドを作成します
- ビューから非表示になっているため、ユーザーには表示されたり、入力されたりすることはありません。
- スパムロボットは通常、すべてのフォーム要素に入力するため、必須フィールドを見逃すことはありません
- 送信時に、非表示のテキスト入力をチェックして、値があるかどうかを確認します。
もしそうなら、それはスパマーです。
※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について紹介しました。セキュリティ対策は、状況に沿って適切な対策を行うことが大事です。
ぜひ、ご自身で試してみて、自分にあった最適な方法を見つけ出してみてください。