Home > 画像認証機能について
- 画像認証機能について -
画像認証とは
- 画像認証とは、いわゆるスパム対策の一つで、掲示板などにおいて、悪意のある機械的な投稿を排除するための機能です。
- 仕組みとしては、投稿フォームから送信するとき、画像に表示された文字を所定の入力フォームに入力してもらうことで、悪意のあるプログラムからの機械的な投稿を回避します。
これは、当然ながら自動投稿プログラムが、画像の中の文字を読めないであろうことを前提としています。
【画像認証の例】
※画像認証の画像は、悪意のあるプログラムが自動的に判別しにくいように、背景に点や線を入れたり、文字の位置を変えるなどの工夫をすることもあります。 - KENT-WEBの場合には、captcha.cgi(Ver.3) において、これを実現しています。
captcha.cgiでは、設定により次の2種類の認証画像を表示することができます。
(1) ライブラリー版【簡易版】: PNG連結ライブラリー (pngren.pl) を利用したもの。
(2) モジュール版【本格版】: GD::SecurityImage + Image::Magickモジュールを利用したもの。
ライブラリー版【簡易版】について
- ライブラリー版は、桜月氏(現在サイト閉鎖中)が開発したPNG画像連結ライブラリー(pngren.pl)を利用します。
- 画像はあらかじめ次のものを用意しており、「binフォルダ」の中に格納しています。
なお、数字画像はすべて Digit Mania にて公開されているものを加工しています。
ファイル名 画像 bq.png br2.png br3.png casual.png cut.png japan.png jump.png kt012.png lynz.png small.png stamp.png - 画像を変更する場合には、設定ファイルである「init.cgi」の次の箇所を指定します。
# [ライブラリ版] 画像ファイル [ ファイル名のみ ]
$cf{si_png} = "jump.png"; # ←ファイル名のみを記述する
モジュール版【本格版】について
- モジュール版は、GD::SecurityImage 及び Image::Magick モジュールを使用します。
- GD::SecurityImageは、すでに「libフォルダ」の中に格納(同梱)していますので、サーバ側にインストールされていなくても構いません。 ただし、Image::Magickはあらかじめサーバ側にインストールされている必要があります。
- ご使用のサーバにおいて、Image::Magickの利用可否を調べるには、サーバの仕様を確認する必要がありますが、「check.cgi」を実行することによっても、簡易的な診断(利用可否のチェック)を行います。
- GD::SecurityImageを使った認証画像では、フォントファイル(TTFファイル)が必要で、現在以下のフォントファイルを「bin」フォルダに予め格納しています。
フォント名 フォント画像 入手元 ライセンス army.ttf Fonts2u.com フリーウェア redressed.ttf Fonts2u.com フリーウェア tempest.ttf Fonts2u.com 個人利用 - フォントを変更する場合には、設定ファイルである「init.cgi」の次の箇所を指定します。
# [モジュール版] 画像フォント [ ファイル名のみ ]
$cf{font_ttl} = "tempest.ttf"; # ←ファイル名のみを記述する - フォントファイルは以下のようなサイトで自由にダウンロードすることができます。 ただし、それぞれライセンスの制約があるものがありますので、英語になりますが、確認しておくとよいでしょう。
- 認証画像のサイズや数字レイアウトをカスタマイズしたい方には、GD::SecurityImageでは、画像サイズ、フォントのレイアウト、背景の点や線などを自由に設定することもできます。あくまでも各自の責任の範囲内で行ってください。
修正するファイル : lib/captsec.pl
修正する箇所 : [ 以下のとおり ]my $image = GD::SecurityImage->new( scramble => 0, # スクランブルモードで「1」にすると各数字の角度を一文字毎に変更します。 width => 90, # 画像の横サイズ height => 26, # 画像の縦サイズ lines => 8, # 画像全体にかける線の数 font => $font, # フォントファイル(ここは絶対に変更しないこと) ptsize => 18, # 文字のポイント数 ); $image->random($captcha_str); # 指定する文字(ここは絶対に変更しないこと) $image->create("ttf", "ellipse"); # 画像全体にかかる線の種類 # [ default : 格子状 + 斜め線 rect : 格子状の線 ] # [ box : 2つの塗りつぶされた四角 circle : 丸 ] # [ ellipse : 楕円 ec : 丸と楕円の線 ] $image->particle(100); # 背景に散りばめるドット数
[ カスタマイズ例 ] scramble => 1 とし、サイズ等を調整