« Biot 1.01が出てた | メイン | MovableType 3.36のTrackback.pm »
2008年1月14日
Perl Authen::Captchaを人が見やすくする修正 >>Perl
PerlのAuthen::Captchaを人が見やすくするために、修正をかける。
oO0Iilb6といった文字列はCaptchaでぐちゃぐちゃにされると人が判別することが難しくなる。
SPAM対策のためだけれども、入力した人はげんなりすることが多い。
ということで個人的にCaptchaを使うのはやめているけれど、「わかんねーよー」という声が上がってきてしまうので、ちょっと対応しておこうかなと。
Authen::Captchaにおいて、任意の文字列を生成しているのはfunctionである generate_random_stringになります。
一応、改変したpmをテキスト化したものを置いておきます。ダウンロードはこちら
どうでもいいけど、このコードだと、ランダム値が偏りそうにも見えるけど、ランダムはどうせランダムだからまぁいーか。とりあえずその辺りはオリジナルのままってことで。
動作を確認し、判別し難い文字があるようなら、ProhibitionChars に、同様に追加してみてください。
手で書き換えられるならば、sub generate_random_string_orginal とかにして保存しておいて、以下のように書き換えます。
sub generate_random_string
{
ref(my $self = shift) or croak "instance variable needed";
my $length = shift;
my @ProhibitionChars =(
'0',
'o',
'O',
'I',
'l',
'i',
'b',
'6',
);
my ($match,$ProhibitionChar);
# generate a new code
my $code = "";
for(my $i=0; $i < $length; $i++)
{
my $char;
my $list = int(rand 4) +1;
if ($list == 1)
{ # choose a number 1/4 of the time
$char = int(rand 7)+50;
} else { # choose a letter 3/4 of the time
$char = int(rand 25)+97;
}
$char = chr($char);
#Add code by debizoh. 2008.01.14
$match = 0;
foreach $ProhibitionChar (@ProhibitionChars)
{
if ($ProhibitionChar eq $char)
{
$match = 1;
last;
}
}
if ($match == 1)
{
$i = length($code) -1;
next;
}
$code .= $char;
$i = length($code) -1;
}
return $code;
}
トラックバック
現在、この記事はトラックバックを受け付けておりません。
コメント
現在、この記事はコメントを受け付けておりません。
この記事をTwitterでみんなに教える。