« 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; }
トラックバック
現在、この記事はトラックバックを受け付けておりません。
コメント
現在、この記事はコメントを受け付けておりません。