CAPTCHA画像の生成

DS216jでWEBサーバーを構築する備忘録の続き。

サーバーにImage::Magickのインストールができない状況で現状のBBSを温存するためには、何か別の方法でCAPTCHA画像の生成をしなければならない。画像の生成だけならPHPで書かれた「Securityimage」で比較的簡単に出来たが、cgiから呼び出して使うにはキーの認証に難がある。で、perlでImage::Magickを使わずにCAPTCHA画像を生成する方法が無いか調べてみたところ、GD::SecurityImageというperlモジュールが使えそう。

試しにCPANを利用して下記コマンド実行したところエラー無くインストールは完了。

keyinit.plの改造

GD::SecurityImageはCAPTCHA画像の生成のみを行うもので、キーの認証機能は含まれない。そこで、キーコードの生成・認証については今までどおりこちらで配布されているスクリプトを使うことにした。keyinit.plはキーのランダム生成と、出力する画像フォーマットの設定、キーの暗号化と復号の役割を持ち、cgiのプラグインとして動作する。これを以下のように改修した。

まずはImage::Magick用の設定項目である下記部分はザックリ削除。

代わりにGD::SecurityImage用の設定項目を追記する。なお、フォントのluxirb.ttfはNASにインストールされていなかったので、古いサーバーからコピーした。画像フォーマットについてはこちらのサイトを参考にパラメータを設定。

image_gen.cgiの改造

image_gen.cgiは暗号化された確認キーを引数として受け取り、keyinit.plを通じて復号し、CAPTCHA画像を出力する役割を持つ。これを下記のように書き換えた。

これらの改修にて、BBSのcgi上でCAPTCHA画像の生成と認証が正常にできるようになった。Image::Magickを使った時と比べてやや単調なイメージになってしまうが、一応キーは暗号化されているし、ロボットSPAMに対しては一定の抑止力にはなるだろう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

wp-puzzle.com logo