( )
English
||
(*)
Japanese
wb.cgi
"らくがき" 解説
wb.cgi
"らくがき" は,俗に言う webの掲示板 です.
どのようなものかは,実際に落書きで試してください.
なお,当然ですがフリーです. 勝手に自分のホームページに設置しちゃってかまいません. 好きに改造しまくってもOK!
橘心女学院熊本校 トップページへまず,次の配布パッケージをダウンロードしてください. Webブラウザでリンクで右クリックして, 「リンクを名前をつけて保存」(Save link as)を選択.
wb120.lzh
wb120.tgz
- らくがき v1.20 配布パッケージwb119.lzh
- らくがき v1.19 配布パッケージwb118.lzh
- らくがき v1.18 配布パッケージwb117.lzh
- らくがき v1.17 配布パッケージwb116.lzh
- らくがき v1.16 配布パッケージwb115.lzh
- らくがき v1.15 配布パッケージwb113.lzh
- らくがき v1.13 配布パッケージwb112.lzh
- らくがき v1.12 配布パッケージwb111.lzh
- らくがき v1.11 配布パッケージwb110.lzh
- らくがき v1.10 配布パッケージwb109.lzh
- らくがき v1.9 配布パッケージwb108.lzh
- らくがき v1.8 配布パッケージwb106.lzh
- らくがき v1.6 配布パッケージwb105.lzh
- らくがき v1.5 配布パッケージwb103.lzh
- らくがき v1.3 配布パッケージwb008.lzh
- らくがき v0.08 配布パッケージ次のファイル構成表では最新版を見ることができます.
ファイル | パーミッション ※1 | 内容 |
---|---|---|
wb.cgi ※2 |
rwxr-xr-x (755) |
メインとなるCGIスクリプト |
config.pl ※3 |
rwxr-xr-x (755) |
設定ファイルwb.cgi を変更してくても,
このファイルでほとんどの設定を変えることができます.配布アーカイブには config.txt という名前で
サンプルが入っています.
以前の設定が必要ない場合は、
このファイルをconfig.pl にリネームして、
管理者用パスワード等を設定して使用するといいでしょう.
|
jcode.pl |
rwxr-xr-x (755) |
日本語コード変換ライブラリ by Kazumasa Utashiro |
htmlck.pl |
rwxr-xr-x (755) |
かんたんなHTML文法チェックライブラリ |
cgi-lib.pl |
rwxr-xr-x (755) |
ファイルアップロード用のmultipart-form解析ライブラリ by Steven E. Brenner The cgi-lib.pl Home Page |
ftype.pl |
rwxr-xr-x (755) |
ファイルアップロード用のファイルタイプ解析ライブラリ |
standard.html |
rw-r--r-- (644) |
出力するHTMLのテンプレート 標準だと このファイルに記述された形式でWebページをデザインして出力しますが, $template
を変更して他のファイルにすることもできます正確には standard.html と決まっているわけでなく、
@templates の最初に定義してあるファイルです
|
notable.html |
rw-r--r-- (644) |
出力するHTMLのテンプレート その2 Tableを使用しない表示スタイルです |
japanese.html |
rw-r--r-- (644) |
出力するHTMLのテンプレート その3 日本語だけの表示です |
english.html |
rw-r--r-- (644) |
出力するHTMLのテンプレート その4 英語だけの表示です |
minibbs.html |
rw-r--r-- (644) |
出力するHTMLのテンプレート その5 MiniBBSっぽい表示です |
minibbs9.html |
rw-r--r-- (644) |
出力するHTMLのテンプレート その6 MiniBBS v9っぽい表示です |
imode.html imodew.html
|
rw-r--r-- (644) |
出力するHTMLのテンプレート その7 DocomoのiMODE携帯電話からアクセスする場合など、 User AgentがMozillaでないときに出力するHTMLのテンプレート $templatei
を変更して他のファイルにすることもできます正確には imode.html と決まっているわけでなく、
@templates の最初に定義してあるファイルですimodew.html は投稿時のテンプレート
|
compact.html |
rw-r--r-- (644) |
出力するHTMLのテンプレート その8 コンパクトな表示 |
help.html |
rw-r--r-- (644) |
ヘルプのテンプレート |
helpe.html |
rw-r--r-- (644) |
英文ヘルプのテンプレート |
wbpw.html |
rw-r--r-- (644) |
パスワード入力画面の雛型 (Member mode ※4のときだけ必要) |
wb.gif |
rw-r--r-- (644) |
standard.html を変更して自分とこに
この画像を置いときたい人だけお持ち帰りください.
|
bg.gif |
rw-r--r-- (644) |
標準のstandard.html で使用している背景イメージです.
|
nshelp.gif |
rw-r--r-- (644) |
解説用の画像です.
|
nghost |
rw-r--r-- (644) |
投稿を禁止するホストのIPもしくはドメイン名のリストを格納したファイル 初期設定で@nghostsに登録されている. |
ngword
spamsub
spamlist
spambody
|
rw-r--r-- (644) |
投稿を禁止する語句のリストを格納したファイル 初期設定で@ngfilesに登録されている. |
wb.cgi
wb.cgi
は,そのままの名前だとCGIとして実行されてしまうので,
wb.txt
と名前を変えてあります.
入手後にwb.cgi
に名前を変えてください.
config.pl
config.txt
と名前を変えてあります.
config.pl
に名前を変えてください.
wb.cgi
の内容を確認設定wb.cgi
の最初の行のperlのパスを指定
wb.cgi
をテキストエディタで編集して,
最初の行の#!
の後ろの
/usr/local/bin/perl5
等と書かれてる部分を
設置するwebサーバで許可されてるperlのパスに変更します.
perlは, version 4 でも version 5 でも
どちらでも動作するように作ってるつもりなのですが,
なぜか version 4ではcoredumpしてしまうことがあります.
よくわからなかったら
/usr/local/bin/perl5
とか
/usr/local/bin/perl
とか
/usr/bin/perl5
とか
/usr/bin/perl
等を試してみてください.
wb.cgi
の各種変数を設定
それから,以下の変数を設定してるところを適切な値に変更します.
コメントに(*)
マークがついてるとこです.
v1.3から,以下の設定のほとんどは,
config.pl
で設定できるようになりました!
wb.cgi
を編集して設定を変更するよりも.
config.pl
で設定するほうがよいでしょう.
特に,日本語を使用する場合は
config.pl
で設定したほうがいいです.
config.pl
は事前に文字コードをEUCに変換してから
eval
されます.
$rootpasswd
$userpasswd
$userpasswd = ''; # Public mode こうするとだれでもアクセスできる
$userpasswd = 'foo'; # Member mode このパスワードを知ってる人だけ
$dbdir
db
)$secure
wb.cgi
自体のパーミッションを適切に設定しておかなければ意味がありません.
$author
%author%
がこれに置換されます)
$email
%email%
がこれに置換されます)
$top
%top%
がこれに置換されます)
$tope
%tope%
がこれに置換されます)
$tope = '';
$topi
%topi%
がこれに置換されます)
$dbfilemax
$dbsizemax
db
→ db0001
,
db0001
→ db0002
,
...
とrenameされ,新しいdb
が作成されます.$dbsizemax
* $dbfilemax
バイトとなります.
$artsizemax
$maximgwidth
$maximgheight
@nghosts
nghost
のコメントを参照してください.@ngfiles
nghost
と同じです.$template
@template
の最初のものが使用されます.
$templatei
Mozilla
でないときに
出力するHTMLの雛型となるファイル.@template
の2番目のものが使用されます.
@template
$cookietime
$denc
sjis
,
JISで保存したいならjis
,
EUCで保存したいならeuc
という値を設定します.
初期設定ではsjis
になっています.sjis
に変更されました.
これ以前のものは,jis
が初期設定となってます.
$head_title
Whiteboard
.$body_title_en
english.html
で最初に表示されるタイトル文字列.
初期設定は$head_title
と同じ.$body_title_ja
japanese.html
で最初に表示されるタイトル文字列.
初期設定は落書するべからず!
.$body_title
standard.html
で最初に表示されるタイトル文字列.
初期設定は$body_title_en
$body_title_ja
.
<h1>と<a>の中に埋め込まれますから,
その中で使えるHTMLタグしか使わないようにしましょう.
$stylesheet
ブラウザで
standard.html
や
japanese.html
を
表示してみるとわかりますが,
表示スタイルは,これらのテンプレートファイルで定義されてます.
文字の色とか背景色などの簡単な変更であれば,
$stylesheet
でスタイルシートを設定することで可能ですが,
もっと大幅に表示スタイルを変えたい場合には,
これらのテンプレートファイル自体を自分で作成することになります.
もちろん,何もない状態から作るのは大変ですから,
standard.html
や
japanese.html
などの
最初から用意されているものをコピーして
それを変更するという作り方がいいかと思います.
編集にはできるだけテキストエディタを使用してください.
(HTMLエディタだと勝手に内容が変更される可能性があるため)
新しいテンプレートを作ったら,
config.pl
の
@template
にそのテンプレートファイルを追加します.
たとえば,mystyle.html
という
テンプレートファイルを作ったら次のような内容を
@template
に追加します.
"mystyle.html My-style *私らしく",
%%なんとか_begin%%
...
%%なんとか_end%%
は,
条件つき出力等の制御のための文字列です.
%なんとか%
は,
しかるべき文字列に置換されます.
よくわからない人は,これらは変更しないようにしましょう!
helpe.html
,
help.html
を編集して解説をデザイン
helpe.html
,
help.html
は,
それぞれ[HELP] [解説]で表示されるHTMLのテンプレートです.
変更しなくてもそれなりに書き込み方法について解説してありますが,
より詳しくとか解りやすく解説したい場合にはこのファイルを編集してください.
このファイルも実際に表示されるときには,
%なんとか%
は,
しかるべき文字列に置換されます.
wbpw.html
を編集してパスワード入力ページをデザイン
wbpw.html
は,
Member mode(特定の人だけアクセスできるモード)の
パスワード入力ページのテンプレートです.
$userpasswd
に空でない文字列を設定してMember modeにしたら,
このテンプレートファイルを編集してパスワード入力画面をデザインしてください.
サンプルのwbpw.html
のままだと
パスワードがバレバレです.
まず,
設置したいwebサーバの貴方のホームページを置いているディレクトリ
(多くのサーバではpublic_html
)に
掲示板用のディレクトリを作成します.
パーミッションは,rwxr-xr-x
(755)にしてください.
サーバによっては,CGIを実行可能なディレクトリはcgi-bin
だけという
ことがあるかもしれませんが,
その場合には,そのCGIを実行可能なディレクトリを使用してください.
そして,その掲示板用のディレクトリにファイルを転送します.
画像ファイル 何とか.gif
は
バイナリモードで,
それ以外のファイルは
テキスト(ASCII)モードで転送したほうがいいでしょう.
ファイルを転送したら, ファイル構成表のとおりに 転送したファイルのパーミッションを設定してください.
次に,
その掲示板用のディレクトリにデータファイルを置くディレクトリを作成します.
db
という名前のディレクトリ
($dbdir
を変更した場合は,その名前のディレクトリ)
を作成してください.
このディレクトリのパーミッションは,
rwxrwxrwx
(777)に設定します.
CGIがファイルオーナーの権限で実行されるwebサーバの場合には,
パーミッションを rwx------
(700)に設定するとより安全になります.
なお参考までに,掲示板を運用してくと,
データファイルを置くディレクトリdb
には,
以下のファイルが自動的に作成されてきます.
($dbfilemax
が20の場合)
ファイル | パーミッション | 内容 |
---|---|---|
db | ??? | 最新のデータ |
db0001 | ??? | そのひとつ前のデータ (昔db だったもの) |
db0002 | ??? | そのふたつ前のデータ (昔々db だったもの) |
: | : | : |
db0019 | ??? | その19個前のデータ (昔々々…db だったもの) |
index.html | ??? | (Secure modeのときにindex.htmlが無ければ) |
画像などのファイルのアップロード機能を使用する場合には, データファイルを置くディレクトリ (初期設定ではdbというディレクトリ) にアップロードされたファイルを置いとくディレクトリを作成します.
db/file drwxrwxrwx ディレクトリ db/file/incoming drwxrwxrwx ディレクトリ db/file/log -rwxrwxrwx 0バイトのファイル
試しになんか書き込んでうまくいけばおわり. うまくいかなかったら, 橘心女学院熊本校の らくがきで 相談してください. 暇があればサポートします.
橘心女学院熊本校 トップページへ
v0.08には書き込みの削除機能がつきました.
New!
削除したい書き込みの頭にあるチェックボックスをチェックして.
下のほうにあるパスワード入力フィールドに
書き込んだ時の削除キーまたは管理者パスワードを入力し,
その後の[Delete]ボタンを押すだけです.
チェックされた書き込みが消えるハズです.
ということで, 以下の書き込み削除の説明は過去のものとなりました. 読みとばしてください.
直接データファイルを編集することで書き込みを削除することができます. webブラウザから対話的に削除する機能は, 現在サポートされてません. (これは単にインターフェイスをデザインするのがメンドクサイからです)
~/wb/db/db
のどこを削除するかは,
~/wb/db/db
を見てみればスグわかるはずです.
逆に言えば,
見てもわからない人は編集しないでください.
www.oersted.co.jpのように
telnetしてMuleが使用可能なwebサーバでは,
Muleから~/wb/db/db
をオープンして
それを直に編集してかまいません.
(Muleは編集中に他のプロセスによりファイルが変更されたら,
セーブ時に警告するようになってるので安全です)
Muleなどが使えない場合には,ftpを使って次の手順で削除します.
db.lck
というファイルを
データファイルを置いてるディレクトリに転送します.
db.lck
はどんなファイルでもいいです.
(長さ0でもかまいません)
とにかく,db.lck
というファイルを
データファイルを置いてるディレクトリに作成してください.
db
をGET
webサーバのデータファイルを置いてるディレクトリから
db
をローカルにGETしてきます.
転送は,バイナリモード, 漢字コードは無変換を使用してください.
(ほんとはなんでもいいのですが,
説明がめんどくさいので)
db
を編集
db
を編集して,削除したい書き込みを削除します.
Windowsで編集するときは,
Meadowを
使用するようにしてください.
(他のテキストエディタでも,
ちゃんと漢字コードや行末コードを処理できるものは
大丈夫だとは思いますが)
db
をPUT
編集したdb
を
データファイルを置いてるディレクトリに転送します.
転送は,バイナリモード, 漢字コードは無変換を使用してください.
(ほんとはなんでもいいのですが,
説明がめんどくさいので)
データファイルを置いてるディレクトリの
db.lck
というファイルを削除します.
このファイルが存在してる間は書き込みがブロックされています.
このCGIに限らず, CGIの実行がCGIファイルのオーナーの権限で実行されるwebサーバでないと データファイルを他のユーザーから保護することはできません. なぜなら, 他のユーザーが webサーバにあるファイルを表示するCGIを設置したら, CGIスクリプトやデータファイルの内容を知ることができるからです. (って,ホントに設置するなよ>オレ)
したがって, CGIスクリプトやデータファイルのオーナーを自分にして, パーミッションはオーナー以外のアクセスを禁止しておくことで データを保護することになります.
wb.cgi
のパーミッションは,
rwx------
(700)にします.
config.pl
のパーミッションは,
rw-------
(600)にします.
データファイルを置くディレクトリ
($dbdir
で指定してるディレクトリ)
のパーミッションは,
rwx------
(700)にします.
このようなwebサーバでも, ファイルのSUIDビットをセットしておくと CGIがファイルオーナーの権限で実行される場合があります. 例えば,httpdにApacheを使用してる場合, なぜかperlのスクリプトだとSUIDを無視してnobodyの権限で実行しますが, Cコンパイラでコンパイルした実行ファイルはSUIDが有効のようです.
ですから, www.oersted.co.jpのように telnetログインできてCコンパイラが使える場合には, 以下の方法が使えます.
まず,wb.cgi
の名前をwb.pl
に変更します.
そのパーミッションは,
rwx------
(700)にします.
次のようなCのソースファイル wb.c
を作成します.
main() { return system("/home/yav/public_html/bbs/wb.pl"); }
/home/yav/public_html/bbs の部分は、掲示板を設定する自分のディレクトリを絶対パスで指定してください。 相対パスで指定するとセキュリティホールになります。
それをコンパイルして実行ファイルを作り,
そのパーミッションは,
rwsr-xr-x
(4755)にします.
% cc wb.c -o wb.cgi % chmod 4755 wb.cgi
データファイルを置くディレクトリ
($dbdir
で指定してるディレクトリ)
のパーミッションは,
rwx------
(700)にします.
Version 1.13で設定ファイルのキャッシュを作成するようにしましたが、 このキャッシュファイルにセキュリティホールがありました!
config.pl
から
そのキャッシュファイル config.pl.cache
を作成するが、
そのときはまだumaskの値が設定されてないので
生成されたキャッシュファイルを他人が見ることができる。
config.pl.cache
のパーミッションを、
telnetやftpでrw-------
(600)に変更する。
$template
が定義されてなければ
@templates
の最初のものを使用するようにした$templatei
を追加$template
, $templatei
に定義されてるテンプレートではなく
standard.html
もしくは
notable.html
が参照されるという問題を修正imode.html
で
「投稿」を押したら再度パスワード入力を要求されるバグを修正$scure = 1
)の場合に、
添付された画像ファイルをCGIを介してアクセスするように変更したspambody
などのリストファイルの読み込み時の処理を変更して、
\#
で#を記述できるようにしたngword
, spambod
y等の
NGワードファイルのキャッシュを生成するようにしたngword
等を$fileinfo
にも反映&
で切れていたのを修正$artsizemaxK
, $maxdataK
など
データサイズをキロやメガで表示できるようにしたnghost
, ngfiles
で
はじくホストやNGワードを指定REQUEST_URI
を付加するようにしたjcode'tr
で全角半角変換するようにしたconfig.pl.cache
がo+rで生成されていたので、
設定を評価した後で生成することで回避したconfig.pl
やスタイルの定義ファイルの
キャッシュを作成するようにしたimodew.html
を
使用するようにした%topi%
でiMODE用のトップページを指定するようにしたimode.html
を変更%dd%
などの置換対象となる文字列があったら置換してしまうバグを修正compact.html
の
%%styleselect_begin%%
の記述が間違ってて,
[Previous]を押したとき記事が何も表示されないバグを修正https
とshttp
を追加$gzip
を設定するとgzipで圧縮して出力するようにした$lastmodified
を設定しとくと,
HTTPヘッダにLast-modified
を出力するようにしたcgi-lib.pl
や
ftype.pl
を使いはじめてみたりする$style
の
Table
, No-table
を
standard.html
,
notable.html
に変更compact.html
を追加%%nhead_begin%%
とかを
%%head_begin%%
に変更#
なんとかに対応tel
に対応$dbsizemax
を超えても
データベースファイルの切り替えがおきないバグを修正htmlck.pl
を,
実際にチェックするときにタグのテーブルを生成するように変更%head_title%
等にしておいて置換するようにしたtemplate.html
を廃止して,
standard.html
とnotable.html
に分割'#'
で始まる行は
コメントとして無視するようにした#
で始まる行は
コメントとみなさないようにしたconfig.pl
を
EUCに変換してからevalするようにしたconfig.pl
で指定できるようにした%%styleoptions%%
追加REMOTE_ADDR
REMOTE_HOST
HTTP_USER_AGENT
も記録するようにした"
が入ってると
プレビューでソレ以降が無くなるBUGを修正config.pl
が存在したら,
ソレをrequire
するようにしたので,
wb.cgi
を編集しなくても各種設定を変更できるようになった#
で始まる行は
コメントとみなすようにしたjcode
とhtmlck
を
使用するか使用しないか選べるようにしたtime
の代わりに$^T
を利用するようにした$artn
一度に表示する書き込み数を
ユーザが指定できるようにした$artsizemax
書き込みの最大バイト数制限をつける