======================================================================== サポートスクリプト(あめぞう型掲示板) UTF-8 版 https://csmith.jp/amebbs01/ ======================================================================== ■これは何か あめぞう型掲示板「サポートスクリプト(サポスク)」を、 文字コード UTF-8 で動くように書き直したものです。 元は Shift_JIS 専用でした。作者は @あめぞう(仮) 管理人のサポート氏。 UTF-8 にすると、こうなります。 ・「\」「~」「①②③」「髙」など、Shift_JIS で化けやすい文字が通る ・jcode.pl が不要になる(新しい Perl で動かないという問題も消える) ・エディタもブラウザも今どきの既定のまま扱える 靴屋(https://csmith.jp/)が作成し、エックスサーバー上の サブディレクトリで一通り動作確認しています(2026-08-30 / Perl 5.16)。 ■同梱ファイル amezo.cgi 本体 dai.cgi ヘッドライン生成 blist.txt 板の定義(3板ぶんの雛形) header.html ヘッダ/index.html の雛形 ng.txt NGワード(空) delpass.txt 削除機能の合言葉ハッシュ(空。設定は後述) htaccess/ .htaccess の雛形(後述) README.txt このファイル CHANGES.txt Shift_JIS 版からの変更点の一覧 文字コードは全て UTF-8(BOMなし)、改行は LF です。 アップロードは必ずバイナリモード(改行変換なし)で行ってください。 jcode.pl は不要になったので入っていません。 ■設置手順 1. amezo.cgi の1行目を、鯖の Perl のパスに合わせる #!/usr/bin/perl ← /usr/local/bin/perl のこともある SSH が使えるなら `which perl` で分かります。 2. amezo.cgi の 14 行目、掲示板の URL を書き換える $urlbase = 'http://ame.x0.com/'; ↓ $urlbase = 'https://example.jp/bbs/'; 末尾のスラッシュを忘れずに。すぐ下の $amezo(掲示板の名前)と $admin(管理人名)も好きに変えてください。 3. blist.txt を編集する。1行1板で [URL上の板名],[背景色],[日本語名] 板名の先頭に「.」を付けるとヘッドラインに出ません(隠し板)。 背景色のうしろに「!画像パス」で背景画像になります。 4. blist.txt に書いた板の名前でディレクトリを作る 5. header.html の板リンクを、自分の板構成に合わせて書き換える 6. header.html をコピーして、各板ディレクトリに index.html と index2.html という名前で置く 7. .htaccess を置く(htaccess/ の中の雛形を使う) htaccess/cgi-htaccess.txt → CGI を置いたディレクトリに .htaccess として htaccess/board-htaccess.txt → 各板ディレクトリに .htaccess として これで文字コードの指定、投稿者IPの入った global.mem の遮断、 「投稿しても画面が更新されない」キャッシュ問題の対策が入ります。 8. パーミッションを設定する amezo.cgi dai.cgi 755 blist.txt header.html .htaccess 644 ng.txt delpass.txt 400 板ディレクトリ 755 板の index.html index2.html 644 9. ブラウザで http(s)://~/main/ を開き、 いちばん下の「リロード」ボタンを押す。 背景色と板のタイトルが変われば成功です。 ■最終的な配置 掲示板のディレクトリ/ (755) ├ .htaccess (644) ← htaccess/cgi-htaccess.txt ├ amezo.cgi (755) ├ dai.cgi (755) ├ blist.txt (644) ├ header.html (644) ├ ng.txt (400) ├ delpass.txt (400) ※削除機能の合言葉。初期は空 ├ global.mem (600) ※自動生成 │ ├ main/ (755) │ ├ .htaccess (644) ← htaccess/board-htaccess.txt │ ├ index.html (644) │ └ index2.html (644) ├ zatsu/ (755) └ test/ (755) ■NGワード(ng.txt) 1行1件、カンマ区切りで [NGワード],[オプション] と書きます。 オプション 意味 ---------- ------------------------------------------------ n 投稿者欄専用。一致したら投稿そのものを無効にする c 本文欄専用。一致したら投稿そのものを無効にする (空) 投稿者・メール・本文から、一致した部分だけを削る 例) あぼーん, スパム,n 荒らし,c UTF-8 のままで動きます。 ■スレッドの削除(管理人向け) 合言葉のハッシュは amezo.cgi 本体ではなく、別ファイル delpass.txt に 置きます。amezo.cgi は GET でソースが見える作りですが、合言葉のハッシュは 別ファイルにあり、その delpass.txt は .htaccess で web から読めないように 遮断してあるので、外からは見えません。 初期状態では delpass.txt は空です。この状態では削除機能は誰も使えません。 設置者であっても、合言葉を設定するまでは使えません。 (元の作者のパスワードは削除済みです。ハッシュ方式も、時代遅れの DES を やめて SHA-512 crypt に変えてあります) 手順は2ステップです。 1. 合言葉のハッシュを作る(サーバ上で実行してください) perl -e '@c=("A".."Z","a".."z",0..9,".","/"); $s=join"",map{$c[int(rand(@c))]}1..16; print crypt($ARGV[0], "\$6\$$s\$"), "\n"' "好きな合言葉" "好きな合言葉" の部分を自分の合言葉に変えて実行します。 "$6$……$……" で始まる長い文字列が出るので、それを控えます。 ($6$ は SHA-512 crypt の目印。salt は毎回ランダムに作られます) ※ SHA-512 crypt なので合言葉の長さ制限は実質ありません。 日本語の合言葉でも構いませんが、半角英数字のほうが無難です。 2. delpass.txt に、1 で出た文字列を1行だけ書いて保存します。 $6$abcdefghijklmnop$XXXXXXXX……(1で出た値) ファイルには他に何も書かないでください。 パーミッションは 400 または 600 にしておきます。 これで合言葉が有効になります。 使い方は、投稿フォームの「投稿者」欄に合言葉(ハッシュではなく 元の文字列のほう)を入れ、消したいスレッドへのレスとして送ります。 ・本文が空 → スレッドを x***.html にリネームして隠す ・本文に 3 や 5-8 → その番号のレスを削除 ・本文に x → スレッドファイルを読めなくする ・メール欄に何か入れる → 削除ではなく管理人名で発言する ※合言葉を変えたくなったら、1・2 をやり直して delpass.txt を 書き換えるだけです。amezo.cgi を触る必要はありません。 ■動かないときは 症状 だいたいの原因 ---------------------------- ------------------------------------------ Internal Server Error (500) 1行目の Perl パスが違う/改行が CRLF に なっている/amezo.cgi が 755 でない 「エラー」とだけ出る $urlbase と実際の URL が食い違っている。 ブラウザが Referer を送っていない場合も リロードしても変わらない 板ディレクトリが 755 でない/ index.html が 644 でない(CGIが書けない) 投稿すると文字化けする ファイルを Shift_JIS で保存してしまった。 UTF-8(BOMなし)で保存し直す 画面が古いまま board.htaccess を置いていない ■そのまま公開する前に このスクリプトは 1999〜2003 年に書かれたものが元です。 この版では XSS 対策を強化しました(投稿内容を & " < > ' すべて HTMLエスケープ、自動リンクは https?: 限定で rel 付き、folder の パストラバーサル禁止。詳細は CHANGES.txt [13])。素朴なスクリプト 埋め込みや属性インジェクションは防げます。CSRF も、referer チェックに 加えて Origin ヘッダ検証を入れ、他サイトからの投稿を弾きます (CHANGES.txt [17])。 スパム対策は「同一IPから180秒は新規スレッド不可」「板ごとに5秒の 連投抑止」「NGワード」だけで、今のボットには通用しません。 公開して運用するなら、少なくとも ・投稿フォームに CAPTCHA を入れる(Cloudflare Turnstile など) ・Cloudflare などのレート制限を前段に置く ・ng.txt に URL のパターンを仕込む くらいはしてください。 ■著作権について スクリプト中の以下の表記は改変しないでください(作者の意向)。 UTF-8 対応の変更点は CHANGES.txt に全て書いてあります。 設置解説の原著は、三河版の三河人さんによる 「サルでも解る?!あめぞう型掲示板作成」 http://www.mikawaban.com/etc/amebbs01.html です。感謝します。