[サイト更新履歴]

ランダムアンチスパムキーを導入 / 2009-08-11 (火)

EarthRiZEのコメントや掲示板に導入しているアンチスパムについての質問をいただきまして、この質問を機にEarthRiZEでもランダムアンチスパムキーを導入しました。
(今までは、固定のアンチスパムキーでした)
せっかくなので一般記事としても、rNoteへランダムアンチスパムキーの導入方法について書いておこうと思います。


まず、ランダムアンチスパムキーとは何ぞや?
っという方は、「コメントを入れる」をクリックして見てください。
すると、コメントを入れるのに、anti spam key [12345678]なるものを入力せねばならぬ項目が表示されていると思います。
今回お話しております、ランダムアンチスパムキーはこの数字の部分が、アクセスするたびにランダムに変化するという物です。

ただ、今回ご紹介するランダムアンチスパムキーの導入方法では、一箇所だけJavaScriptを利用しています。
そのため、JavaScriptが利用できない環境では、コメント投稿が出来ないということになってしまいます。
もっとも、現在のブラウザ事情ではそうそう気にしなくても問題はないと思います。


さて、肝心のrNoteにランダムアンチスパムキーを導入する方法を紹介していこうと思います。


<毎度お馴染みの決まり文句ですが、ワタクシhogemonia_mk2はPHPやJavaScriptをマジメに勉強したことがない人間です。
 聞きっかじりでうろ覚えの実に貧弱かつ脆弱なプログラム知識でプログラムを書いていますので、動作の保証は出来ません。>



まず、以下の内容のファイルを作成し、random_anti_spam_key.phpという名前で保存してください。
特にrNoteで使用する際は文字コードがutf-8となるように保存してください。
保存が完了したら、rnote.phpと同じフォルダへアップロードしてください。

-----random_anti_spam_key.php------

<?php

//セッション開始
session_start();

//100000~999999のランダムに変わる数値を取得(6ケタの場合)
//8ケタなどにする場合は rand(10000000,99999999);としてください。
//ただ、この方法では001234といった0から始まる数値はランダムの範囲に入りません
$random_ask = rand(100000,999999);

//セッション変数に保存
$_SESSION['random_anti_spam_key'] = $random_ask;

//参照元のページにアンチスパムキーを出力
echo "document.write(\"".$random_ask."\");";

?>

-------------------------------------



続いて、rnote.phpを編集作業に移りますが、念のため編集前のrnote.phpのバックアップを忘れないようにしてください。

では、お持ちのエディタでrnote.phpを開いていただき、1行目の<?php直下の行(2行目)に

-------------------------------------
session_start();
-------------------------------------

という行を加えてください。



次に、66行目辺りの// messagesとある付近に

-------------------------------------
define(WB_ERR_BAD_ANTISPAM,'投稿キーが間違っています。投稿画面に戻ってやり直してください。');
-------------------------------------

という行を加えてください。


そのまたお次は、506行目付近の// WriteBackの近くに
$file = $_GET['u']; <514行目辺り> と DoublePostChk($name.$com); <516行目辺り>
という2行がありますので、この2行の間に

-------------------------------------
if($_POST['antispam_keyword_wb'] != $_SESSION['random_anti_spam_key']){error(WB_ERR_BAD_ANTISPAM,ERR_WB);}
-------------------------------------

という行を加えてください。

以上の3行をrnote.phpに加え終わったら編集したrnote.phpを保存してアップロードしてください。



続いて、アンチスパムキーの入力部分の加えていきます。

コメント(ツッコミ)投稿部分にランダムアンチスパムキーを実装したい方は「entriesフォルダ内のwriteback.skin」ファイルを、掲示板の投稿部分に実装したい方は「entries/bbsフォルダ内のhtml_body.skin」ファイルをエディタで開いてください。

そして、どちらのファイルにも
url or email: <input type="text" name="tag_AuthorUrl" size="60" value="<%=$cookie_url%>" maxlength="200" />
といった行がありますので、その直下に

-------------------------------------
<p>anti spam key [<script type="text/javascript" src="random_anti_spam_key.php"></script>]:   <input type="text" name="antispam_keyword_wb" size="50" maxlength="30" /><br/></p>
-------------------------------------

という行を追加してください。


あとは編集中のwriteback.skinないしhtml_body.skinを保存&アップロードして、rnoteadmin.phpからさい構築することでアンチスパムキーの入力テキストフィールドが表示され、コメント投稿時のランダムアンチスパムキー認証が有効になります。



以上、rNoteへランダムアンチスパムキーを導入する方法でした。


何か変なことを言っていたらご指摘いただければ、と思います。

それでは、今回の記事はこれにて。

[ コメントの受付は終了しています ]
1: Sakura Mizuki (08/12 23:31)
記事公開ありがとうございます。

本家(rinn氏)のHTMLソースを見るとhidden属性で
ハッシュ値を持たせて、ハッシュ値と入力したキーのハッシュ値が
あっているかどうかで認証しているのでは…と考えています。

ちなみに元々の方式ではどうやってAntiSpamKeyの値を
取得されていたのでしょうか?(ここでも本家でもコメントを
書き込んだり削除するとAntiSpamKeyの値が変化したような
気がしますが…。)

掲示板のコメントとほぼ同じでごめんなさい。
2: hogemonia_mk2 (管理人) (08/13 17:10)
<掲示板への書き込みの流用で申し訳ないです...>

Sakura Mizuki さま

こんにちは&こんばんわ。
EarthRiZE管理人のhogemonia_mk2です。

Mizukiさんの仰っている方法(本家と同じ、「ハッシュ値を持たせて、ハッシュ値と入力したキーのハッシュ値が
あっているかどうかで認証」する方式)での、ランダムアンチスパムキー認証のrNote用プラグインを作成しました。

現在、公開ページの準備をしていますので、今しばらくお待ちください、です。
(説明下手なので、コードを書くという方法でしかお手伝いできませんでした。)
3: hogemonia_mk2 (管理人) (08/13 22:18)
<またまた、掲示板への書き込み流用で申し訳ないです...>

Sakura Mizuki さま

こんばんわ&こんにちは。
EarthRiZE管理人のhogemonia_mk2です。

少々予告から遅くなってしまいましたが、以下のページでMizukiさんの仰っている方法(本家と同じ、「ハッシュ値を持たせて、ハッシュ値と入力したキーのハッシュ値があっているかどうかで認証」する方式)での、ランダムアンチスパムキー認証のrNote用プラグインを公開しました。

http://blog.mct-lab.com/rnote.php?u=program/rnote_plugins/rask.htm

もしよろしければ、一度ご覧ください。
また、EarthRiZEのコメント投稿部分と掲示板書き込み部分にも導入しましたので、このページのHTMLソースの方もあわせてご覧ください、です。

それでは、失礼します。
今回は私も良い勉強になりました。
何かありましたら、またどうぞ~、です。
(もっとも、これからは少々バタバタしていることが多いので、対応が少し...というか大分遅くなってしまうかもかも、です。)

-------------------
<注意>
この記事「ランダムアンチスパムキーを導入」で紹介されているアンチスパムと、
http://blog.mct-lab.com/rnote.php?u=program/rnote_plugins/rask.htm
で紹介しているアンチスパムは別物です。
また、EarthRiZEでは2009/08/13以降はこの記事で紹介したアンチスパムキーは利用していません。