新規記事投稿 フォロー記事投稿 記事のキャンセル
From: にあ <nir@mvg.biglobe.ne.jp>
Subject: 【更新】不正/多重投稿防止パッチ
Date: 1999/12/23 23:56:56

ずいぶん以前になるんですが、会議室への投稿フォームに認証キーを加える事で
不正投稿/多重投稿を防ぐ機構に付いて検討したことがありました。

その後、全然、会議室のヴァージョンが上がっていなかったことから、この機構も新版の
α版に入れただけで、現行版には反映されていなかったのですが、最近、ある会議室が
荒らしの被害にあって相当滅茶苦茶にされたと言う事故が起こったことから、急遽、
現行バージョンにも反映させることになりました。

# 12月の初めにTestの部屋で動作チェックしていたので、分かったと思いますが
# ぱーまぁさんの所です。1日の平均投稿数が50本ぐらいある所なので、
# 大事だったようです。
## いつもなら巡回ルートにあるのですが、ちょうど忙しい時期で、ろくに会議室
## 巡回が出来ていなかったので、現場は見られませんでした。(^^;;

最新β版及びパッチのペーヂからarticle.cgiforum.plの現行版へのパッチを当てると
不正投稿/多重投稿排除機構が使えるようになります。

ただし、以前の版との後方互換性を保つ意味から、単にスクリプトを更新しただけでは
排除機構は有効になっていませんので、利用する場合は設定が必要になります。


・不正投稿防止機構設定法

不正投稿防止機構とは、投稿フォーム毎に異なった偽造困難な認証キーを与えることで
手順に基づいた投稿動作以外の投稿を排除する物です。

新たにsecure.cgiと言う名前のファイルをCGIディレクトリに作って、内容を、

$forum'master_passwd = 'xxxxxxxxxxxxx'; # ここは任意の13文字のキーワード
1;

として下さい。

$forum'master_passwd は本来は名前の通り(暗号化された)マスターパスワードを
登録する変数ですが、現在の所認証キーの種にしか使っていませんので、取りあえずは
13文字(以上)の文字列なら何でも良いです。
# 自分の平文パスワードなんかは書かないで下さいね。(^^;;;

secure.cgiには読み込み権限は付けるけど、実行権限は『付けないで』下さい。
こうしておくと、ネット上から読んでも内容は分かりません。
要はネットからsecure.cgiを読んだ時、内容が表示されないような設定なら良いです。

サーヴァがSetUIDモードで動いているなら、自分の読み込み権限を残して、
他人の読み込み権限を落としておいて下さい。こうしておくと同じサーヴァの
他の人からも読めません。

master_passwdはネット上を流れる情報からは逆演算できませんがmaster_passwdが
知られてしまうと意味が無いので、管理には気を付けて下さい。
# まあ、知られたらすぐに変えれば済むと言えばそうなのですが。(^^;

投稿フォームのソースを眺めると、NAME="authkey"なINPUTが増えているのが
分かると思います。

# hidden属性なので表立っては見えませんが。
# 最後の方に入れておいたので、記事のしっぽ切れ検出にも役立つと思います。


・多重投稿防止機構設定法

サーヴァでデータベース機構(DBM)がサポートされている場合には、不正投稿防止機構に
加えて多重投稿防止機構を導入することが出来ます。

まず正常に不正投稿防止機構が働いているのを確認して下さい。
その後、site.plに、新たに、

$use_dbm = 1;

と言う行を加えて下さい。

これによって、不正投稿防止機構に使われた認証キーをデータベースファイルに貯め、
多重投稿を検知する事が出来るようになります。投稿フォームを認証キー丸ごと
コピーして掲示板に張り付けると言った荒らし手法でも、2本目以降は多重投稿として
排除することが出来ます。荒らしに限らず、投稿ボタンを複数回押してしまって
多重投稿になることも防げます。

# 一般的には、ミスによる多重投稿を防げる事の方が利用価値があると思います。(^^;

データベースファイル(auth_dbm.*)は部屋毎に貯めていきます。
容量が大きくなりすぎる様なら、定期的に消してしまっても、まあ、良いです。
無ければ次の投稿の時に勝手に作ります。
# もちろん消した分の投稿排除は効かなくなりますが。(^^;

いかがでしょうか?

何か、アルゴリズム等、問題があるようでしたらお知らせ下さい。(^^)