#!/usr/local/bin/perl
#┌─────────────────────────────────
#│ JOYFUL NOTE v1.95 (2005/11/20)
#│ Copyright (c) KentWeb
#│ webmaster@kent-web.com
#│ http://www.kent-web.com/
#│
#│ Modified by isso. Jan, 2006
#│ http://swanbay-web.hp.infoseek.co.jp/index.html
#└─────────────────────────────────
$ver = 'JoyfulNote v1.95 Rev1.64';
#┌─────────────────────────────────
#│ [注意事項]
#│ 1. このスクリプトはフリーソフトです。このスクリプトを使用した
#│ いかなる損害に対して作者は一切の責任を負いません。
#│ 2. 設置に関する質問はサポート掲示板にお願いいたします。
#│ 直接メールによる質問は一切お受けいたしておりません。
#│ 3. このスクリプトは、method=POST 専用です。
#│ 4. 同梱のアイコンで、以下のファイルの著作権者は以下のとおりです。
#│ home.gif : mayuRinさん
#│ clip.gif : 牛飼いとアイコンの部屋さん
#└─────────────────────────────────
#
# 【ファイル構成例】
#
# public_html (ホームディレクトリ)
# |
# +-- joyful / bapysbbs.cgi [705]
# | joyful.log [606]
# | count.dat [606]
# | jcode.pl [604]
# | cgi-lib.pl [604]
# | pastno.dat [606]
# | spamdata.cgi [606]
# |
# +-- img [707] / home.gif, bear.gif, ...
# |
# +-- lock [707] /
# |
# +-- past [707] / 1.dat [606] ...
#-------------------------------------------------
# 設定項目
#-------------------------------------------------
# ライブラリ取込
require './jcode.pl';
require './cgi-lib.pl';
# タイトル名
$title = "犬服屋ミニョンドッグに遊びに来てくださってありがとうございます。
ご自慢のワンちゃんの可愛いお写真・書き込み残していってくださいね";
# タイトルの文字色
$t_color = "#804040";
# タイトルの文字サイズ
$t_size = '22px';
# 本文の文字フォント
$face = '"MS Pゴシック"';
# 本文の文字サイズ
$b_size = '10pt';
# 壁紙を指定する場合(http://から指定)
$bg = "http://www.bapys.com/images/bbs_bg.gif";
# 背景色を指定
$bc = "#FF877E";
# 文字色を指定
$tx = "#000000";
# リンク色を指定
$lk = "#0000FF"; # 未訪問
$vl = "#800080"; # 訪問済
$al = "#FF0000"; # 訪問中
# 戻り先のURL (index.htmlなど)
$homepage = "javascript:this.close();";
# 最大記事数 (親記事+レス記事も含めた数)
$max = 50;
# 返信がつくと親記事をトップへ移動 (0=no 1=yes)
$topsort = 1;
# 返信にも添付機能を許可する (0=no 1=yes)
$res_clip = 1;
# 画像と記事の位置
# 1 : 画像が左。記事は右から回り込む
# 2 : 画像が下。記事は画像の上に表示。
$imgpoint = 1;
# タイトルにGIF画像を使用する時 (http://から記述)
$t_img = "";
$t_w = 180; # GIF画像の幅 (ピクセル)
$t_h = 40; # 〃 高さ (ピクセル)
# ファイルロック形式
# → 0=no 1=symlink関数 2=mkdir関数
$lockkey = 0;
# ロックファイル名
$lockfile = './lock/joyful.lock';
# ミニカウンタの設置
# → 0=no 1=テキスト 2=GIF画像
$counter = 1;
# ミニカウンタの桁数
$mini_fig = 6;
# テキストのとき:ミニカウンタの色
$cnt_color = "#BB0000";
# GIFカウンタのとき:画像までのディレクトリ
# → 最後は必ず / で閉じる
$gif_path = "./img/";
$mini_w = 8; # 画像の横サイズ
$mini_h = 12; # 画像の縦サイズ
# カウンタファイル
$cntfile = './count.dat';
# スクリプトのURL
$script = './bapysbbs.cgi';
# ログファイルを指定
# → フルパスで指定する場合は / から記述
$logfile = './joyful.log';
# アップロードディレクトリ
# → パスの最後は / で終わること
# → フルパスだと / から記述する
$imgdir = './img/';
# アップロードディレクトリのURLパス
# → パスの最後は / で終わること
$imgurl = "http://www.xxx.xxx/~xxx/img/";
$imgurl = "./img/";
# 添付ファイルのアップロードに失敗したとき
# 0 : 添付ファイルは無視し、記事は受理する
# 1 : エラー表示して処理を中断する
$clip_err = 1;
# 記事 [タイトル] 部の長さ (全角文字換算)
$sub_len = 15;
# メールアドレスの入力必須 (0=no 1=yes)
$in_email = 0;
# 記事の [タイトル] 部の色
$sub_color = "#880000";
# 記事表示部の下地の色
$tbl_color = "#FFFFFF";
# 同一IPアドレスからの連続投稿時間(秒数)
# → 連続投稿などの荒らし対策
# → 値を 0 にするとこの機能は無効になります
$wait = 60;
# 1ページ当たりの記事表示数 (親記事)
$p_log = 5;
# 投稿があるとメール通知する (sendmail必須)
# 0 : 通知しない
# 1 : 通知するが、自分の投稿記事はメールしない。
# 2 : 通知する。自分の投稿記事も通知する。
$mailing = 0;
# メールアドレス(メール通知する時)
$mailto = 'xxx@xxx.xxx';
# sendmailパス(メール通知する時)
$sendmail = '/usr/lib/sendmail';
# 他サイトから投稿排除時に指定 (http://から書く)
$base_url = "";
# 文字色の設定(半角スペースで区切る)
$colors = '#800000 #DF0000 #008040 #0000FF #C100C1 #FF80C0 #FF8040 #000080';
# URLの自動リンク (0=no 1=yes)
$autolink = 1;
# タグ広告挿入オプション
# → の代わりに「広告タグ」を挿入する。
# → 広告タグ以外に、MIDIタグ や LimeCounter等のタグにも使用可能です。
$banner1 = ''; # 掲示板上部に挿入
$banner2 = ''; # 掲示板下部に挿入
# ホスト取得方法
# 0 : gethostbyaddr関数を使わない
# 1 : gethostbyaddr関数を使う
$gethostbyaddr = 0;
# アクセス制限(半角スペースで区切る、アスタリスク可)
# → 拒否ホスト名を記述(後方一致)【例】*.anonymizer.com
$deny_host = 'unknown.ord.scnet.net';
# → 拒否IPアドレスを記述(前方一致)【例】210.12.345.*
$deny_addr = '';
# アップロードを許可するファイル形式
# 0:no 1:yes
$gif = 1; # GIFファイル
$jpeg = 1; # JPEGファイル
$png = 1; # PNGファイル
$text = 1; # TEXTファイル
$lha = 0; # LHAファイル
$zip = 0; # ZIPファイル
$pdf = 1; # PDFファイル
$midi = 1; # MIDIファイル
$word = 0; # WORDファイル
$excel = 0; # EXCELファイル
$ppt = 0; # POWERPOINTファイル
$ram = 0; # RAMファイル
$rm = 0; # RMファイル
$mpeg = 0; # MPEGファイル
$mp3 = 0; # MP3ファイル
# 投稿受理最大サイズ (bytes)
# → 例 : 102400 = 100KB
$cgi_lib'maxdata = 102400;
# 画像ファイルの最大表示の大きさ(単位:ピクセル)
# → これを超える画像は縮小表示します
$MaxW = 300; # 横幅
$MaxH = 150; # 縦幅
# 家アイコンの使用 (0=no 1=yes)
$home_icon = 1;
# アイコン画像ファイル名 (ファイル名のみ)
$IconHome = "home.gif"; # ホーム
$IconClip = "clip.gif"; # クリップ
$IconSoon = "soon.gif"; # COMINIG SOON
# 画像管理者チェック機能 (0=no 1=yes)
# → アップロード「画像」は管理者がチェックしないと表示されない機能です
# → チェックされるまで「画像」は「COMMING SOON」のアイコンが表示されます
$ImageCheck = 0;
# 投稿後の処理
# → 掲示板自身のURLを記述しておくと、投稿後リロードします
# → ブラウザを再読み込みしても二重投稿されない措置。
# → Locationヘッダの使用可能なサーバのみ
$location = '';
# 禁止ワード
# → コンマで区切って複数指定する(例)$deny_word = 'アダルト,出会い,カップル';
$deny_word = '';
#---(以下は「過去ログ」機能を使用する場合の設定です)---#
#
# 過去ログ生成 (0=no 1=yes)
$pastkey = 0;
# 過去ログ用NOファイル
$nofile = './pastno.dat';
# 過去ログのディレクトリ
# → フルパスなら / から記述(http://からではない)
# → 最後は必ず / で閉じる
$pastdir = './past/';
# 過去ログ1ファイルの行数
# → この行数を超えると次ページを自動生成します
$log_line = 600;
# _/_/_/_/_/ 管理者設定 _/_/_/_/_/
#
# 管理者用マスタパスワード (英数字で8文字以内)
$pass = 'japetbapys';
# 下記の設定は管理者詐称チェックをする場合のみ必要に応じて変更して下さい。
# 管理者詐称チェック
# 0 : 管理者詐称チェックをしない
# 1 : 管理者詐称チェックをする
$adminchk = 0;
# 一般利用者が使用できないハンドルの指定
$AdminName = "管理人,管理者";
# 管理者用の入力ハンドル、管理者表示を設定します。
$a_handle = "webmaster"; # 管理者投稿時の入力名(管理者用のユーザーID) → 適当なものに変更して下さい
$a_color = "#FF0000"; # 管理者表示色
$a_name = "管理人"; # 管理者の掲示板表示名
# 一時ログファイル
$tempfile = './wf_temp.cgi';
# -------------------------------------
# spam投稿(宣伝投稿)設定
# -------------------------------------
# 通常はそのままで運用して頂き、拒否できない投稿が多いか
# あるいは誤処理が多い場合にのみ設定を変更して下さい。
# URL重複書き込み設定
# URL欄に記入したURLがメッセージ内に書かれている場合
# スパム投稿と見なし書き込みを拒否します。
# 0 : URLの重複書き込みを禁止しない
# 1 : 新規投稿の場合のみURLの重複書き込みを拒否する【推奨】
# 2 : 返信でもURLの重複書き込みを拒否する
$spampost = 1;
# フォーム投稿確認用
# 投稿フォームを使わないプログラム投稿対策です。
# 掲示板スパム投稿が頻発する場合には、たとえば
# $formcheck = 'formcheck_hogehoge_nospam';
# のようにユニークなものに変更して下さい。
$formcheck = 'formcheck_japet_bapys';
# 掲示板アクセスからの経過時間(秒)
# ブラウザを使わないプログラム投稿対策です。
# 投稿者が掲示板を開いて投稿完了するまでの最小時間間隔です。
# 通常は数秒程度に設定しておきます。
# 初期設定は10秒で、ゼロにするとこのチェックは行いません。
$mintime = 10;
# 投稿者が掲示板を開いて投稿完了するまでの最長時間間隔です。
# 通常は数十分〜数時間程度に設定しておきます。
# 初期設定は7200秒(120分)で、ゼロにするとこのチェックは行いません。
$maxtime = 7200;
# 禁止語句(NGワード、URL)登録ファイル
# 書き込み禁止語句を登録するファイルです。
# このファイルに登録された語句、URLを本文やURL欄に書き込むと投稿拒否されます。
# このファイルを削除すると、禁止語句のチェックは行いません。
$spamdata = './spamdata.cgi';
# 禁止語句(NGワード、URL)チェック設定
# 0 : 新規投稿の場合のみ禁止語句(NGワード、URL)チェックをする【推奨】
# 1 : 返信でも禁止語句(NGワード、URL)チェックをする
$spamdatacheck = 0;
# 0 : メールアドレス欄は禁止語句チェックをしない
# 1 : メールアドレス欄も禁止語句チェックをする
$ngmail = 1;
# 0 : タイトル欄は禁止語句チェックをしない
# 1 : タイトル欄も禁止語句チェックをする
$ngtitle = 1;
# URLの直接書き込みを禁止する
# URL(http://〜)のメッセージ内への直接書き込みを禁止し、
# ttp://〜と書き込んだときだけ、URLの書き込みを許可します。
# 0 : URLの直接書き込みを許可する
# 1 : URLの直接書き込みを禁止する(URLを書き込む場合には ttp://〜と記述)
$comment_url = 0;
# 上でURLの直接書き込みを許可する場合はURLを書き込める限度数を設定します。
# ここでは、多数のURL書き込みを禁止することができます。
# 10に設定すると、http://〜を10以上書き込んだ投稿を拒否します。
# ゼロにするとこのチェックは行いません。初期設定は5。
$spamurlnum = 5;
# メッセージに全角文字が含まれているかのチェック設定
# 0 : メッセージに全角文字(日本語)が含まれていなくても投稿を許可する
# 1 : メッセージに全角文字(日本語)が含まれていない場合は投稿を拒否する
$asciicheck = 0;
# メッセージ文字数のチェック設定
# 20に設定するとURL以外の文字数が半角文字で20文字未満、
# 全角文字で10文字未満の場合に投稿を拒否します。
# ゼロにするとこのチェックは行いません。
$characheck = 20;
# 掲示板スパム投稿時の処理
# 0 : エラー表示しない(書き込み拒否のみ)【強力に推奨】
# 1 : 即時エラー表示
# それ以外の数値 : 数値秒後にエラー表示
# 3600に設定すると3600秒(60分)後にエラー表示
$spamresult = 0;
# 掲示板スパムの投稿拒否ログ
# 0 : 記録しない
# 1 : 記録する(推奨)
$spamlog = 1;
# 投稿拒否ログファイル
$spamlogfile = './spamlog.cgi';
# 不正な削除キーの禁止
# 削除キーに半角スペースを含む場合や、
# 「111111」「aaaaa」のような一字の繰り返しを禁止できます
# 0 : 不正な削除キーを禁止しない
# 1 : 不正な削除キーを禁止する
$ng_pass = 0;
# メールアドレスの入力を禁止できます
# 0 : メールアドレスの入力を自由にする
# 1 : メールアドレスの入力を禁止する
# 2 : メールアドレスの入力はアットマークを全角入力「 @ 」に限定する
$no_email = 0;
# アクセスしてから投稿までの間隔が早い場合にはプレビューを表示してから投稿
# 0 : プレビューを表示しない
# それ以外の数値 : アクセスしてから数値秒後までの投稿をプレビューを表示する
# 30に設定すると掲示板にアクセスしてから30秒以内の投稿は
# 一旦プレビューしてから投稿を許可する。初期設定は 30(秒)。
$previewtime = 30;
# プレビュー投稿時にスパムと判断された場合の表示メッセージ
$spammsg = '迷惑投稿として処理されました';
#-------------------------------------------------
# 設定完了
#-------------------------------------------------
# メイン処理
&decode;
&axscheck;
# プレビューモード
if ($previewtime) {
if ($mode ne "post") {
if ($mode ne "admin") {
if ($mode ne "usr_edt") {
my $posttime = time;
my $timecheck = abs($posttime - $in{"$formcheck"});
if ($timecheck < $previewtime) { $mode = "previewmode"; }
}
}
}
}
if ($mode eq "howto") { &howto; }
elsif ($mode eq "find") { &find; }
elsif ($mode eq "usr_del") { &usr_del; }
elsif ($mode eq "usr_edt") { &usr_edt; }
elsif ($mode eq "regist" && $in{'pview'} ne "on") { ®ist; }
elsif ($mode eq "post" && $in{'pview'} eq "on") { ®ist; }
elsif ($mode eq "previewmode") { &previewmode; }
elsif ($mode eq "res") { &res_form; }
elsif ($mode eq "admin") { &admin; }
elsif ($mode eq "past") { &past; }
elsif ($mode eq "check") { ✓ }
elsif ($mode eq "spam") { &spam; }
elsif ($mode eq "spammsg") { &spammsg; }
elsif ($mode eq "spamclear") { &spamclear; }
elsif ($mode eq "spamdata") { &spamdata; }
elsif ($mode eq "editspam") { &editspam; }
elsif ($mode eq 'noscript') { &noscript; }
elsif ($mode eq "admin_repost_form") { &admin_repost_form; }
elsif ($in{'pass'} eq $pass && $mode eq "admin_repost") { ®ist; }
&html_log;
#-------------------------------------------------
# アクセス制限
#-------------------------------------------------
sub axscheck {
# IP&ホスト取得
$host = $ENV{'REMOTE_HOST'};
$addr = $ENV{'REMOTE_ADDR'};
if ($gethostbyaddr && ($host eq "" || $host eq $addr)) {
$host = gethostbyaddr(pack("C4", split(/\./, $addr)), 2);
}
# IPチェック
local($flg);
foreach ( split(/\s+/, $deny_addr) ) {
s/\./\\\./g;
s/\*/\.\*/g;
if ($addr =~ /^$_/i) { $flg = 1; last; }
}
if ($flg) {
&error("アクセスを許可されていません");
# ホストチェック
} elsif ($host) {
foreach ( split(/\s+/, $deny_host) ) {
s/\./\\\./g;
s/\*/\.\*/g;
if ($host =~ /$_$/i) { $flg = 1; last; }
}
if ($flg) {
&error("アクセスを許可されていません");
}
}
if ($host eq "") { $host = $addr; }
}
#-------------------------------------------------
# 記事表示部
#-------------------------------------------------
sub html_log {
local($ipt,$wh,$i,$flag);
# ヘッダを出力
&header;
# カウンタ処理
if ($counter) { &counter; }
# タイトル部
print "
\n"; }
if ($t_img eq '') {
print "$title\n";
} else {
print "\n";
}
if ( (-s $spamlogfile) > 1000000 ) {
print "
\n
\n投稿拒否ログ(スパムログ)のファイルサイズが大きくなりました。
",
"至急、管理モードから投稿拒否ログを削除して下さい。
\n
\n";
}
# メニュー部
print "
\n"; print "
\n"; if ($back >= 0) { $p_flag=1; print " \n"; } if ($next < $i) { $p_flag=1; print " \n"; } # ページ移動ボタン表示 if ($p_flag) { print " \n"; $x=1; $y=0; while ($i > 0) { if ($page == $y) { print "[$x]\n"; } else { print "[$x]\n"; } $x++; $y = $y + $p_log; $i = $i - $p_log; } print " \n"; } print "
\n";
print "\n";
print "- Joyful Note -\n";
print "
Modified by isso\n";
print "