現在執筆中です。
Yomi-SearchにCaptchaを付ける †
ここではYomi-Search(ヨミサーチ)にCaptchaを付ける方法を紹介します。Captchaとは、読みにくい文字を表示した画像を投稿者に解読させることにより、人間が投稿することを確かめる方法です。詳しくは、Wikipediaの解説をご覧ください。
Authen::Captcha †
ここでは、Authen::Captchaを使用することにします。そのため、まずはAuthen::Captchaをインストールする必要があります。もしレンタルサーバーを利用している場合は、管理人にお願いしてください。ちなみに、XREAなどでは、Authen::Captchaがインストールされています。
ディレクトリの作成 †
ここからが本番です。まず、データを保存するディレクトリと、画像を保存するディレクトリを作成します。ここでは、Yomi-Searchを設置したディレクトリに"data"と"images"という2つのディレクトリを作成して、それぞれをデータを保存するディレクトリと、画像を保存するディレクトリにします。これらのディレクトリには適当なパーミッション(777など)を設定ます。
"$captcha->data_folder"に作成されるファイルには外部から見られないようにする必要があります。例えば、".htaccess"を作成して、"deny from all"と書いておきます。".htaccess"が使えなければ、"$captcha->data_folder"のディレクトリの名前を誰も想像しないような複雑なものにしておきます。
"regist_ys.cgi"の改造 †
次に、Yomi-Searchを改造します。Yomi-Searchのバージョンは、4.21とします。
まず、"regist_ys.cgi"をテキストエディタで開いて、その最後に次のようなコードを追加します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
| | sub create_captcha_object {
use Authen::Captcha;
my $captcha = Authen::Captcha->new();
$captcha->data_folder('./data');
$captcha->output_folder('./images');
return $captcha;
}
sub generate_captcha {
$captcha = &create_captcha_object;
my $md5sum = $captcha->generate_code(4);
return $md5sum;
}
sub check_captcha {
if ($FORM{mode} eq "act_mente" || $FORM{changer} eq "admin" ||
$FORM{'preview'} eq "on") {
return;
}
$captcha = &create_captcha_object;
my $results = $captcha->check_code($FORM{captcha},$FORM{captchamd5});
if($results == -3){
&mes("<b>認証コード</b>が正しくありません","認証エラー","back_reg");
} elsif ($results == -1){
&mes("<b>認証コード</b>の有効期限が切れました","認証エラー","back_reg");
} elsif ($results != 1){
&mes("<b>認証コード</b>のチェックに失敗しました","認証エラー","back_reg");
}
}
sub get_captcha_html {
if ($FORM{mode} eq "act_mente" || $FORM{changer} eq "admin") {
return '';
}
my $md5sum = &generate_captcha;
if (!$_[0]) {
return<<"<!--HTML-->";
<br><li>【認証コード】
<ul>※下の画像に表\示されている文字(アルファベットと数字)
を入力してください。<br>
※プレビューする場合は、プレビュー画面で認証コードを入力するため、
ここで入力する必要はありません。<br>
※何らかの理由により画像を読むことができない場合は、その理由を明記して、
管理人までご連絡ください。<br>
<img src="captcha/img/$md5sum.png" alt="認証コード"><br>
<input type=text name=captcha value="$FORM{captcha}" size=30>
<input type=hidden name=captchamd5 value="$md5sum">
</ul><br>
<!--HTML-->
} else {
return<<"<!--HTML-->";
<br><li>【認証コード】
<ul>※下の画像に表\示されている文字(アルファベットと数字)
を入力してください。<br>
※何らかの理由により画像を読むことができない場合は、その理由を明記して、
管理人までご連絡ください。<br>
<img src="captcha/img/$md5sum.png" alt="認証コード"><br>
<input type=text name=captcha value="$FORM{captcha}" size=30>
<input type=hidden name=captchamd5 value="$md5sum">
</ul><br>
<!--HTML-->
}
}
|
次に、749行目あたりにある
と
の間に、次のようなコードを挿入します。
設定の変更 †
上記のコードのうち、設定に関係のある部分を説明します。
create_captcha_objectの"$captcha->data_folder"にデータを保存するディレクトリを指定します。また、"$captcha->output_folder"に作成される画像を保存するディレクトリを指定します。
"$captcha->width"と"$captcha->height"には、一文字あたりの画像のサイズを指定します。指定しないと、25と35になります。
"$captcha->expire"には、Captchaの有効期間を秒単位で指定します。画像が作成されてから入力された値が正しいかチェックするまでの有効期間を指定するものと思われます。指定しないと、300になります。
generate_captchaでは、"$captcha->generate_code"で画像を作成します。この時、文字数を指定します。
"get_captcha_html"は、「新規ホームページ登録」ページに表示するCaptchaに関するHTMLコードを返しています。$_[0]が0の時は「新規ホームページ登録」ページで、$_[0]が1の時は「新規ホームページ登録(プレビュー画面)」ページです。「新規ホームページ登録」ページからプレビューする場合はCaptchaを使う必要がないため、そのことをユーザーに知らせています(そうでないと、2回入力することになってしまうので)。
"get_captcha_html"で行っていることはテンプレートファイルに記述したほうがよいかもしれませんが、コードをまとめておきたかったので、ここに記述しました。
テンプレートの改造 †
次にテンプレートを編集します。編集するテンプレートは、"regist_new.html"と"regist_new_preview.html"です。テンプレートは、templateディレクトリ内にあります。
まず"regist_new.html"をテキストエディタで開いて、180行目あたりの
の後ろに次のようなコードを挿入します。
1
| | my $captcha_html = &get_captcha_html(0);
|
そしてその直後の
の後ろに
を挿入します。
"regist_new_preview.html"の場合も同様です。161行目あたりの
の後ろに次のようなコードを挿入します。
1
| | my $captcha_html = &get_captcha_html(1);
|
そしてその直後の
の後ろに
を挿入します。
これで、終了です。
| ページ情報 |
- カテゴリ : インターネット
- 作成日 : 2007-05-11 (金) 01:58:08
- 作成者 : DOBON!
- 最終編集日 : 2007-05-12 (土) 00:47:38
|