web拍手改造

web拍手支援cgiに各種設定変更機能を追加

 お礼メッセージのランダム/非ランダム表示の切り替えを、web拍手支援cgi上でおこないたいという要望が寄せられたので、web拍手支援cgiに各種設定変更機能を追加した。

 各種設定変更機能は、web拍手支援cgiに機能追加するかたちで実現したため、お礼メッセージの追加機能及び一言メッセージ拒否機能もセットでついてくる。これらが必要でないという人は、お礼メッセージ及び一言メッセージ拒否機能まわりの改造をおこなわず、各種設定変更機能に関する修正にとどめるのがよいだろう。

必要ファイルをダウンロードする

 上記ファイルをダウンロードする。zipにて圧縮されているので、適宜ツールを利用して伸張していただきたい。

ファイルを確認する

 伸張後、以下のファイルが存在するか確認する。

設定等を変更する

maintenance.cgi

 maintenance.cgiをテキストエディタ等で開き、1行目のperlへのパスを、サーバの設定にあわせて変更する。clap.cgiを参考にされるとよいだろう。

 同様に、3行目および4行目を、必要に応じて修正する。修正が必要なのはファイルへのパスを絶対パスで指定しなければならないサーバにおいてだけなので、そうでない場合にはこのままで構わない。なお、clapmod.plの名前を変更したような場合には、当然変更した名前にあわせて修正する必要がある。

require './jcode.pl';
require './clapmod.pl';

clapmod.pl

 clapmod.plを開き、設定値の変更をおこなう。設定は8行目から27行目にかけて書かれている。

 すでにweb拍手支援cgiを使用している場合は、現在の設定をそのまま写すのがよいだろう。その場合、新規に設定を書き換えなければならないのは「各種設定値を保存するファイルへのパス」である。誤って上書きしてしまうと、以前の設定を思い出せなくなることもありうる(私はよくやる)ため注意していただきたい。

# メッセージを保存するファイルへのパス
    $params{mesfile_path} = './mesfile.dat';
# 添付ファイルを保存するディレクトリへのパス
    $params{imgdir_path} = './images/';
# 添付ファイルが保存されているディレクトリへのパス(ブラウザでの表示用)
    $params{imgdir_path_rel} = './images/';
# パスワード(必須)
    $params{password} = '0000';
# アップロード可能なバイト数(KB単位)
    $params{file_size} = 1024;
# ページタイトル
    $params{page_title} = 'web拍手支援cgi';
# cssへのパス
    $params{css_path} = './clapmod.css';
# 実行可能ファイルのアップロード許可:許可=1, 拒否=0
    $params{upload_exe} = '0';
# 拒否設定を保存するファイルへのパス
    $params{denial_list_path} = './deniallist.dat';
# 各種設定値を保存するファイルへのパス
    $params{config_file_path} = './config.dat';

 ファイルへのパスを絶対パスで指定しなければならないサーバにCGIを設置する場合は、「メッセージを保存するファイルへのパス」および「添付ファイルを保存するディレクトリへのパス」、「拒否設定を保存するファイルへのパス」、「各種設定値を保存するファイルへのパス」を絶対パスで記述する。このあたりの情報は、ご利用のプロバイダのCGIに関する説明を参照していただきたい。

 お礼メッセージを保存するファイルの名前(デフォルトではmesfile.dat)及び拒否設定を保存するファイルの名前(デフォルトではdeniallist.dat)は変更した方がいいだろう(名前を変更する理由については、web拍手を設置する人へを参照されたい)。必要ならば、添付ファイルを保存するディレクトリ(デフォルトではimages)や各種設定値を保存するファイルの名前を変えるのもいいだろう。これらの名前を変更した場合には、「メッセージを保存するファイルへのパス」、「添付ファイルを保存するディレクトリへのパス」、「添付ファイルが保存されているディレクトリへのパス(ブラウザでの表示用)」、「拒否設定を保存するファイルへのパス」、「各種設定値を保存するファイルへのパス」を変更した名前に合わせて修正すること。

 「添付ファイルが保存されているディレクトリへのパス(ブラウザでの表示用)」は、ブラウザが表示に使用するものなので、絶対パスで書く必要はない。相対指定のほうがなにかとよいと思う。

 ディレクトリを指定する場合は、末尾に/(スラッシュ)ないしは\(バックスラッシュもしくは¥、環境によって表示が異なる)をつけなければ動作に不都合が出るので、ご注意いただきたい。/はUnix、Linux系のサーバ、\はWindows系サーバで使われるディレクトリを示す記号だ。

 「パスワード(必須)」の変更も重要だ。もしmaintenance.cgiの名前を変更せず、パスワードの変更もしなかった場合には、第三者が自由にweb拍手の中身を変更できてしまう。最低でもパスワードを、できればパスワードとファイル名の両方を変更したほうがいい。maintenance.cgiの名前は自由に付け直して構わない(名前を変えても、プログラムの修正は発生しない)。ただし、拡張子はcgiのままにしておいた方が無難だ。

 「アップロード可能なバイト数(KB単位)」では、添付ファイルの最大サイズを設定している。デフォルトでは1024KB(1MB)だが、必要に応じて増減するのがよいだろう。

 「ページタイトル」は変更しても構わないが、別に変更するメリットもないので、そのままでよいだろう。「cssへのパス」も同様、変更の必要はない。ただし、CSSファイルの名前を変更したときには、修正が必要になる。

 「実行可能ファイルのアップロード許可:許可=1, 拒否=0」は、拡張子がexe,bat,com,cgi,plであるファイルのアップロードを許可するかどうかを決定する。デフォルトは0であり、この場合、上記の拡張子を持つファイルのアップロードは抑制される。1にすればなんでもアップロードできるようになるが、不都合が生じる可能性もあるのでお勧めできない。特にWindows系サーバを利用している場合、cgiやplファイルをアップロードしてしまうと、実行可能になる可能性が極めて高い。セキュリティの観点からも、アップロードできないようにしておくべきだろう。

ファイルをアップロードする

 以下のファイルをサーバにアップロードする。clap.cgiの設置されているディレクトリに置かれることを想定して作られているので、ぜひそのようにしていただきたい。

 すでにweb拍手支援cgiを使用している場合は、mesfile.dat及びdeniallist.datを新たにアップロードする必要はない。上書きすると現在設定されているメッセージ、拒否設定が消えてしまう(私はこうしたことをたまにやってしまう)。ぜひご注意いただきたい。

ディレクトリを作成する

 添付ファイル用のディレクトリを作成する。デフォルトではimages。必要に応じて変更していただきたい。

 すでにweb拍手支援cgiを使用している場合はこの行程は飛ばしていただいてかまわない。

パーミッションを変更する

 ファイルおよびディレクトリのパーミッションを以下のように変更する。

CGIを改造する

 clap.cgiおよびclapinit.cgiを改造する。

お礼メッセージの追加変更に関する改造

 以下の改造は、すでにweb拍手支援cgiを導入している場合には必要ない

clapinit.cgi

 22行目から35行目にかけてのお礼メッセージ設定部分を削除あるいはコメントアウト(行頭に#をつける)する。

# 拍手送信後画面用お礼メッセージ1(タグ使用可)
$message[0]='拍手が送信されました。<br>ありがとうございました!';

# 拍手送信後画面用お礼メッセージ2(タグ使用可)
$message[1]='拍手が送信されました。<br>ありがとうございました!';

# 拍手送信後画面用お礼メッセージ3(タグ使用可)
$message[2]='拍手が送信されました。<br>ありがとうございました!';

# 拍手送信後画面用お礼メッセージ4(タグ使用可)
$message[3]='拍手が送信されました。<br>ありがとうございました!';

# 拍手送信後画面用お礼メッセージ5(タグ使用可)
$message[4]='拍手が送信されました。<br>ありがとうございました!';
clap.cgi

 17行目あたりにrequire './clapmod.pl';を追加する。必要に応じて、パスを絶対パスに変更する。

 フォームデコードの付近に@message = &getMessages;を追加する。私はフォームデコードの直前に加えた。

変更前
#----------外部ファイル読み込み(サーバーによっては絶対パスで指定)
require './jcode.pl';
require './clapinit.cgi';

#---------フォームデコード
&decode;
変更後
#----------外部ファイル読み込み(サーバーによっては絶対パスで指定)
require './jcode.pl';
require './clapinit.cgi';
require './clapmod.pl';

@message = &getMessages;

#---------フォームデコード
&decode;

 最後に、clap.cgiの138行目を変更する。

変更前
#------メッセージ
$i = int(rand(5));
変更後
#------メッセージ
$i = int(rand($#message + 1));

一言メッセージ拒否機能に関する改造

 以下の改造は、すでにweb拍手支援cgiを導入している場合には必要ない

clap.cgi

115行目を変更する。

変更前
#---------------------------------------一言メッセージ処理
if ($hitokoto ne ''){
変更後
#---------------------------------------一言メッセージ処理
if ($hitokoto ne '' && &censorMessage($hitokoto)){

 もしさまざまな情報を取得する改造を施している場合、関数&censorMessage()に渡す引数は$hitokoto_logでも$hitokotoでもどちらでもかまわない。$hitokoto_logを渡したら、そこに含まれる文字列が拒否対象になる。

各種設定変更機能に関する改造

 各種設定変更機能については、別紙を参照いただきたい。

 改造は以上で終了である。アップロードして、動作するかどうかを確認いただきたい。

Perlのバージョンについて、そして謝辞

 今回の改造用に用意したCGIは、Perl 5に組み込まれているcgi.pmを利用している。Perl 5.004以降の環境が必要だ。またupload()メソッドも用いているため、cgi.pmのバージョンが2.47以降である必要がある。

 今回のCGIを作成するにあたり、CGI - 簡単なCGI(Common Gateway Interface)クラスをはじめとする多くのサイト、ページを参考にした。有用な情報を公開、提供してくださっている諸氏に感謝いたします。

web拍手支援cgiの利用について

 「web拍手支援cgi」の利用は、どうぞ自由にしていただいてかまわない。使用に際しなんらの対価も求めないし、改変、改造、再配布に関する制限もしない。

 「web拍手支援cgi」はクッキーを使ってパスワードの管理をおこなうため、ブラウザがクッキーを受け入れるよう設定していただく必要がある(デフォルトではクッキーを受け入れるようになっていることと思う)。クッキーの有効期間は3時間に設定しているが、必要に応じて延長されるのも悪くないだろう(その際にはCGI - 簡単なCGI(Common Gateway Interface)クラスが力になってくれるはずだ)。

 そうそう、「web拍手支援cgi」の使用時には、ページの再読み込みや戻るを使わない方がいい。予期しない動作を引き起こしかねないためだ(表示/非表示の切り替えをした後に再読み込みをしてみると、そういう意味がわかると思う)。

おまけ

 そういえば、同梱のcensortest.cgiについてこれまでまったく触れていなかった。一体これはなにかというと、拒否設定が有効であるか調べるためのプログラムだ。使用方法は以下のとおり。

設置

  1. 一行目のperlへのパス及びjcode.plとclapmod.plへのパスを変更
  2. clap.cgiと同じディレクトリにアップロード
  3. パーミッションを755に変更

機能

 フォームで送られたメッセージを判定し、拒否設定に応じて結果が返される。メッセージが拒否された場合は「bad」、拒否対象でない場合は「good」の文字が表示される。

 このCGIは関数&censorMessage()をテストする目的で作ったプログラムを修正したものだ。特になんの役に立つものでもないので、アップロードする必要はない。もしこれを使うという場合は、ファイル名を変更しておいたほうがいいだろう。攻撃者に無用の情報を与える必要はないからね。


<   >

わたしの愛した機械へ トップページに戻る

公開日:2008.01.27
最終更新日:2008.01.28
webmaster@kototone.jp
Creative Commons License
こととねは、クリエイティブ・コモンズ・ライセンス(表示 - 継承 2.1 日本)の下でライセンスされています。