■簡易BBS -Type2- version 1.** 取扱説明書&技術資料 《特徴》 ・表示画面はシンプルに!をコンセプトに、削除モードや投稿モードを別画面にした。 ・表示はページ管理として、1画面に表示する記事数が設定できる。 ・管理者のみ投稿できるおしらせモードに設定可能。 ・削除モードもページ管理として、途中の画面で記事の削除後でもその画面のページ(そのページの先頭番号)を保持させた。 ・投稿モードではクッキー機能(名前等をブラウザに記憶する機能)で記憶させるか消去するかを選択可能にした。 ・投稿時には「記入した通りに表示する」かしないかを選択(チェック)し、選択した場合の内容は
タグを使って表示される。
・既に投稿済みの記事の修正を可能にした。
・投稿後にボタンでその記事の修正が可能で、修正後は削除モードになり、すぐ削除が可能。
・削除や修正は、その記事を投稿したときに記入した削除キーで本人確認をする。
・削除や修正は、マスターキーで全記事の実行が可能となる。
・データが更新される場合(投稿/修正/削除/マスターキー変更)は、その実行前のデータがテンポラリーファイルにバックアップされる。
・バックアップには外部処理(cpコマンド)が使われるために、perlの遅い処理速度をカバーさせた。
・ファイルロック機構(同時重複起動によるファイル破損防止機構)が組み込まれた。
・更新機能(最新の画面にする機能)が付いた。
・最大記録件数を設定可能(総データ量の制限ではない)。
・参照チェック(任意の場所からの悪戯投稿を確認する機能)あり。
・記録はされるが、表示時にリモートホスト名やエージェント(ブラウザ)名の表示の可否を設定可能。
・HTML式(半角スペースが意味を持たなくなってしまう)ではなく、記録されたまま表示される(
表示利用)。
・
表示はインターネットエスクプローラではフォントが小さくなってしまうので、それを補正する機能あり。
・記事間に挿入するタグを自由設定可能(デフォルトでは罫線
だが、何でも可能)。 ・1記事に投稿されるデータ量(総受信データ量)をバイト単位で制限可能。 ・ファイルの配列読込処理を全くしていないので、大きな配列が生まれず、サーバのメモリを食う等の負担が少ない。 ・データ形式は完全にUNIXファイルとなるので、他OS(Windows,Mac)でデータの編集が可能。 ・表示や投稿(修正)画面の上部にHTML形式の内容を初期設定で指定可能。 ・セキュリティ強化のために、タグとしての記入はできないようにした。 ・その代わりに、リンクと画像のURL(http手順に限る)記入欄を設け、表示できるようにした。 ・マスターキーによって(管理者処理)記事に修正を加えると、その記事の削除キーを管理者が変更でき、その記事の修正(削除)ができないようにできる。 ・標準入力(METHOD=POST)専用としたために、GETで生じる様々なセキュリティホールがカバーされた。  ※このタイプ2では、安全対策を強化したために、その分設置環境や機能の一部の自由が制限されます。   自由と制限は相反するもので、セキュリティ対策を強化するには自由を犠牲にせざるを得ません。 《設置可能なサーバであるかを確認する資料》 ・UNIX仕様なので、NTやMACサーバでの動作はサポートしない。(できるかもしれないし・・・) ・CGIによって外部シェルコマンドの実行が可能であること。  ※ perlにおいて、system("$cp $file $temp"); のようなコピーコマンドの実行が可能であること。 ・CGIWRAP等の特殊な環境での動作は確認していない。 ・ファイルロック機構を利用する場合は、CGI(nobody)でファイルの新規作成処理に規制がないこと。 《基本設置構成と動作確認》  ダウンロードした直後の初期設定は下記の構成で設置して、まず動作確認をするための 最低限のデフォルト値になっています。なお、Windowsを利用している方を対象にして説明しますので、 その他のOSの方は同様の手続きになるように作業してください。  CGIの実行できる任意のディレクトリ ( )内はパーミッション値         |         |-- jcode.pl (644)         |-- minibbs.cgi (755)         |-- dat.cgi (666)         |-- tmp.cgi (666)  0.ファイルの編集にはメモ帳(\windows\notepad.exeまたは[スタート]→[プログラム]→[アクセサリ])を使います。  1.minibbs.cgiの1行目の #!/usr/local/bin/perl をあなたのサーバ環境に合わせて書き換えます。    これについては契約しているプロバイダにお問い合わせください。    なお、この行の「#!」よりも左にスペースがあっても、上に行があってもいけません。  2.minibbs.cgiの初期設定の #◆このCGIスクリプトを設置するURL $reload = 'http://ドメイン名/IDまたは設置したパス名/minibbs.cgi';    を、設置する場所のURLを設定します。この $reload で設定したURLがアクセスURLとなります。    完了したら保存します。    ※ メモ帳で保存すれば、SJIS&WINDOWSファイルとして記録されます。    ※ このURLをリンク等に記述します。例:簡易BBSへ    ※ このURLが間違っていれば、アクセスした時に Not Found になってしまいます。  3.dat.cgi および tmp.cgi という名前の、中身のない(サイズ0バイト)ファイルを用意します。  4.jcode.pl はダウンロードしたまま編集せずそのまま使います。  5.FTPソフトを利用し、ホームページ作成でHTMLファイルを転送する要領で、用意した4つの    ファイルを転送します。その時必ず「アスキーモード」(AボタンやASCIIモード)を選択した上で転送します。  6.各ファイルのパーミッションを設定します。  7.以上で動作試験用に設置完了です。    ブラウザの Location: 欄に $reload で設定したURLを記入しアクセスしてください。    マスターキー設定画面が出て、正常に設定できればとりあえず設置成功です。    さて、このままでは終了先URL設定などの各種設定をしていません。minibbs.cgi の初期設定に    従ってカスタマイズしてください。 《初期設定およびカスタマイズの解説》 #◆このCGIスクリプトを設置するURL $reload = 'http://ドメイン名/IDまたは設置したパス名/minibbs.cgi'; #◆画面の「終了」リンク先のURL $modoru = 'http://トップページのURL等/'; ※ 終了リンクをクリックして簡易BBSを抜ける場合のリンク先です。 ※ フレーム内で簡易BBSを利用している場合はフレーム解除されます。 #◆タイトルバーに表示する名称 $title = '簡易BBS2'; ※ ブラウザの上部に表示されるもので、タグは使えません。 #◆画面ボディー設定 $body = ''; ※ 画面の色や背景、リンク色などを設定します。''の中に記入します。 #◆閲覧画面の上部挿入HTML $head_1 = <<'EOF';

簡易BBS2

EOF ※ $head_1 = <<'EOF'; の次の行から EOF の前の行までの間がそのまま画面に挿入されます。 ※ ここでは見やすくするために左にタブコードが記録されて段落がありますが、無くても結構です。 #◆投稿/修正画面の上部挿入HTML $head_2 = <<'EOF';

投稿と修正

EOF ※ 同様に、投稿&修正画面の上部にそのまま挿入されます。 #◆日本語コード変換ライブラリ require './jcode.pl'; ※ 既にプロバイダで用意されているとか、他のCGIスクリプト用に設置してある場合は、   その位置を正確にここで設定すれば、改めて設置する必要はありません。 #◆内容が書き込まれる記録ファイルのパスを設定 $file = './dat.cgi'; ※ このファイルに実際の投稿が、簡易BBS2専用のフォーマットで記録されていきます。 #◆作業用ファイルのパスを設定 $temp = './tmp.cgi'; ※ 作業用ファイルには、データファイル($fileで設定したファイル)が更新される場合に、   処理前の状態が保存されます。万が一の場合にご利用ください。 ※ このファイルはいつでも空にしてしまっても問題ありません。 #◆参照チェックする 1:yes 0:no (投稿元が$reloadの値を含まない場合に投稿を許可しない) $ref_check = 1; ※ 知らない場所からあなたのこの掲示板に投稿してしまうことも可能です。   それを防止するために、発信元が $reload でない場合には受け付けないようにする機能です。 ※ 設置するサーバがこの情報を与えてくれないところでは、その機能は役目を果たしません。 #◆インターネットエスクプローラ(IE)利用時に表示フォントを大きくする 1:yes 0:no $IEfont = 1; ※ 記事閲覧時に利用しているブラウザ名を判断し、IEを利用している方の内容の文字フォントを   1サイズ大きくします。 #◆投稿者のリモートホスト名を表示する 1:yes 0:no $view_host = 1; ※ 投稿者のリモートホスト名を記録&表示する機能で、どこから送信しているかを記録するために、   いたずらをしないようにするための抑止力の一つです。必ずしも特定できるものでもありません。 ※ 表示しなくてもデータには記録されます。 #◆投稿者のブラウザ名を表示する 1:yes 0:no $view_agent = 1; ※ 投稿者の利用しているブラウザ名を記録&表示する機能です。ブラウザ名は改ざんが比較的容易なので、   参考程度にするといいでしょう。 ※ 表示しなくてもデータには記録されます。 #◆タイトル背景の設定 $title_back = '#ffaaaa'; ※ タイトル表示行は処理されますが、比較的新しいバージョンのブラウザでは、   その部分のバックに色が付けられます。 #◆記事間に挿入するタグ $separate = '
'; ※ 記事と記事の間に挿入するタグの設定です。
は罫線ですが、文字でも画像でも設定可能です。 #◆画像URL記入欄を利用する 1:yes 0:no $image_form = 0; ※ 画像先URLを入力する欄を用意するかどうかの設定です。 #◆ファイルロックを利用する 1:symlink式 2:open式 0:no $lock = 0; ※ ファイル破損をできるだけ防止するために、できるだけ1または2に設定してください。 ※ 2よりも1の方がより精巧にロックしますが、使えるかどうかは当サイトのFAQ#32を読んでください。 ※ 1も2も使えない場合は、CGI(nobody)でファイルの新規作成処理に規制があることが推測されます。   「CGI(nobody権限)でパーミッション777の任意のディレクトリに新規ファイル作成が可能か?」どうかを聞いてください。   駄目なら残念ながら0に設定し、こまめにバックアップを取って万が一に備えるしかありません。 ※ 設定するには次の準備をする必要があります。 ● 自分のエリア内に作成して、その場所を次の設定項目に設定します。   この例の通りであれば、$tmp = './tmp/'; と設定します。 例:     CGIの実行できる任意のディレクトリ ( )内はパーミッション値        |        |-- tmp/ (777) ここに新規に tmp という名前でディレクトリを作成する        |        |-- jcode.pl        |-- minibbs.cgi        |-- dat.cgi        |-- tmp.cgi ※ ファイルロックに関して詳しくは、当サイトのFAQ#14を読んでください。 #◆ファイルロックを利用する場合に設定 $tmp = '/tmp/'; #テンポラリディレクトリの設定 ※ $lock = 0; の場合は何も設定する必要はありません。(このままでもOK) #◆総受信データサイズ制限(bytes) 0で無制限 $max_size = 0; ※ 記事の内容のサイズではなく、送信されてくるすべての情報の総データ量の制限量です。 #◆1画面に表示する記事件数 $def = 10; ※ 総記事件数がこの件数を上まわると、1画面にはこの設定件数を1ページとして分割表示します。 #◆書き込み件数の最大登録数の設定 (この件数を超えると古いものから自動削除) # (サーバ負荷を考慮し,大きくしないことが重要) $max = 100; ※ 総記事数の最大値です。記録データ数の制限ではありません。 #◆シェルコマンド'cp'の設定 (Pathが通っていればこのままでよい:例 /usr/bin/cp ) $cp = 'cp'; ※ まずこのままで運用し、正常に投稿や修正などが可能であればOKです。 ※ もしエラーメッセージが出た場合は、このコマンド自体が使えるかも含め、パスをプロバイダに聞いて正しく設定します。 #◆このスクリプトをSJISで設置する場合は'sjis'に、EUCで設置する場合は'euc'に設定 $conv = 'sjis'; ※ 画面の文字と投稿された内容のどちらかが化けている場合は、スクリプト設置した際の   文字コードとこの設定が一致していない場合が推測されます。 #◆時刻調整 ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); ※ 直接 localtime() を編集する方法は、当サイトのFAQ#15を参照ください。 《その他》  ・名前とEメール欄には、; : , の記録はできません。(クッキー処理の都合による)  ・クッキーはその仕様により、ピリオドが3個に満たないドメイン内では動作しないとのことです。  ・各画面は直接アクセスできるために、フレームを使ってそれぞれの画面を表示させたり、   あなたのアイデア次第でいろいろできます。ただしその場合は、フレーム処理先の設定(TARGET)を   スクリプト内に書き込まなければなりません。
を探して、フレーム構成に応じてTARGET文を設定します。   これについてはサポートしませんので、各自勉強してアレンジしてください。 通常表示画面 http://設置したURL/minibbs.cgi 投稿画面 http://設置したURL/minibbs.cgi?cmd=form 削除もできる画面 http://設置したURL/minibbs.cgi?cmd=rm 《バックアップの重要性》  いくらファイルロック機構を使っていても完全ではありません。データは常にバックアップを取って、 万が一に備えることが重要です。この簡易BBS2の場合、dat.cgi をアスキーモード(または適切なモード)で 取り出して保存しておきます。'編集を加えない'のであれば、バイナリモードで取り出しそのまま保存し、 万が一の場合はそのままバイナリモードで転送(上書き)することで、その時点まで復活します。 《技術資料》 ・データ(dat.cgi)のフォーマットについて  最初の1行目にマスターキーが暗号化されて記録されます。  masterkey暗号済文字列<改行>  万が一マスターキーを忘失してしまった場合は、別に同システムを設置してマスターキー設定をし、  そのデータに記録された暗号文字列を、忘失してしまった方のデータを書き換えます。  ※ 暗号については、当サイトのFAQ#18を参照ください。  データ内の改行だけの行は無視されます。    1件の記事の最初は  boundary 0528160958:ZgQg1zucMEnFU  ( boundaryデータ番号:この記事の削除キーの暗号文字列 )  であり、最後は  __0528160958  ( __データ番号 )  です。  その他は ヘッダ値 という形式で記録され、ヘッダが終わって最初の だけの行が  ヘッダの終了になり、次の行の に続く内容が投稿内容となります。ヘッダの順番が違っても正しく動作しません。  データ形式が間違っていると、そのデータをスキップ(無視)して次のデータを処理します。 ------------------------------------------------------------------------ masterkey ZahGMcTHlmr.a boundary 0528160958:ZgQg1zucMEnFU subject テスト投稿 name レスキュー email resq@rescue.ne.jp date 5月28日(木)16時09分 host utp105.ask.ne.jp agent Mozilla/3.04 (Win95; I) image url www.rescue.ne.jp/ pre 0 length 4 test test __0528160958 ------------------------------------------------------------------------  pre項目については  この項目が空欄または項目自体がない場合(v1.02よりも過去のバージョン)では、
による「記入した通りに表示する」扱いとなる。

・ロックファイル名について

 ロック名は $reload から英数字以外(_を除く)の文字を_に変換し、右から数えて30文字以内を利用しています。

	$lockname = $reload;
	$lockname =~ s/\W/_/g;
	$lockname =~ s/\n//g;
	if (length($lockname) > 30) { $lockname = substr($lockname,-30,30); }