========================================================================
 サポートスクリプト（あめぞう型掲示板） 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 のパターンを仕込む

 くらいはしてください。


■著作権について

 スクリプト中の以下の表記は改変しないでください（作者の意向）。

     <!--
          Script for amezo-like BBS
          Copyright (C) 1999-2003 amezo_
          http://www17.big.or.jp/~amezo_/
          http://ame.x0.com/
     -->

 UTF-8 対応の変更点は CHANGES.txt に全て書いてあります。

 設置解説の原著は、三河版の三河人さんによる
 「サルでも解る？！あめぞう型掲示板作成」
 http://www.mikawaban.com/etc/amebbs01.html
 です。感謝します。
