Top >画像認証機能について

- 画像認証機能について -

画像認証とは 画像認証とは
  • 画像認証とは、いわゆるスパム対策の一つで、掲示板などにおいて、悪意のある機械的な投稿を排除するための機能です。
  • 仕組みとしては、投稿フォームから送信するとき、画像に表示された文字を所定の入力フォームに入力してもらうことで、悪意のあるプログラムからの機械的な投稿を回避します。 これは、当然ながら自動投稿プログラムが、画像の中の文字を読めないであろうことを前提としています。

    【画像認証の例】

    画像認証の例
    ※画像認証の画像は、悪意のあるプログラムが自動的に判別しにくいように、背景に点や線を入れたり、文字の位置を変えるなどの工夫をすることもあります。

  • KENT-WEBでは、captcha.cgi(Ver.3) において、これを実現しています。 captcha.cgiでは、設定により次の2種類の認証画像を表示することができます。

    (1) ライブラリー版【簡易版】: PNG連結ライブラリー (pngren.pl) を利用したもの。
    (2) モジュール版【本格版】: GD::SecurityImage + Image::Magickモジュールを利用したもの。


ライブラリー版【簡易版】 ライブラリー版【簡易版】について
  • ライブラリー版は、桜月氏(現在サイト閉鎖中)が開発したPNG画像連結ライブラリー(pngren.pl)を利用します。
  • 画像はあらかじめ次のものを用意しており、「binフォルダ」の中に格納しています。 なお、数字画像はすべて Digit Mania にて公開されているものを加工しています。
    ファイル名 画像
    bg.png bg.png
    br2.png br2.png
    br3.png br3.png
    casual.png casual.png
    cut.png cut.png
    japan.png japan.png
    jump.png jump.png
    kt012.png kt012.png
    lynz.png lynz.png
    small.png small.png
    stamp.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」フォルダに予め格納しています。
    フォント名 フォント画像 入手元
    tempest.ttf tempest.ttf Free Unique Fonts
  • フォントを変更する場合には、設定ファイルである「init.cgi」の次の箇所を指定します。

    # [モジュール版] 画像フォント [ ファイル名のみ ]
    $cf{font_ttl} = "tempest.ttf"; # ←ファイル名のみを記述する

  • フォントファイルは以下のようなサイトで自由にダウンロードすることができます。 ただし、それぞれライセンスの制約があるものがありますので、英語になりますが、確認しておくとよいでしょう。

    FONTS500

  • 認証画像のサイズや数字レイアウトをカスタマイズしたい方には、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 とし、サイズ等を調整

    カスタマイズ例