fml8 チュートリアル (バージョン 7.99.1-20180910)
Prev | Chapter 17. カスタマイズの事例 | Next

# ケーススタディ: フォローする場合なら誰でも投稿可能なＭＬ

「メンバー以外からの投稿」を受けて「投稿が拒否される」ケースが結構あり ます。

もちろん自分の使っているアドレスを変更したのを忘れたとか、サブドメイン があったりなかったりなど、適当な使い方をしていたためのエラーもあれば、 転送先で読んで、そこから返事を書いてエラーになるケースもあります。

そこで、2004/10/28 以降の article_post_restrictions には、特定の条件を 満たせば短時間だけ From: のアドレス(認証に使うメールアドレス)に関わら ず投稿可能なオプション機能が追加されています。

現在の実装は「本ＭＬの記事を受けていて、その記事に対してのリプライをす るのであれば通してやろう」というものです。ただし時間制限つきです。 具体的には、In-Reply-To: もしくは References: で過去(一週間以内)の記事 の message-id: を参照しているメールに対しては、(From: のメールアドレス に関わらず)記事の投稿を許します。

## レシピ

1. フォローする場合なら誰でも投稿可能なＭＬ

1. フォローする場合なら誰でも投稿可能なＭＬ

設定例は次のようになります。 check_article_thread が、このオプションです。

    article_post_restrictions       =       reject_system_special_accounts
                                            check_article_thread
                                            permit_member_maps
                                            reject

これをデフォルト設定にしておいたほうが便利な気もしますが、いまのところ、 そういう設定になっていません。 この機能を利用したい場合、明示的に article_post_restrictions を変更して下さい。

注: fml8 2008/08/17 以降のバージョンでは isolate (SPAM の隔離)が推奨です。

    article_post_restrictions       =       isolate_system_special_accounts
                                            check_article_thread
                                            permit_member_maps
                                            isolate

## 議論

ま、ようは cookie みたいなもんですよね。 ですが、課題は色々あります。

1) 許す時間の長さを、どのくらいまで短くするのが適正か？

    article_post_article_thread_lifetime = 86400

$article_post_article_thread_lifetime という変数で制御できるようにして みました。デフォルトでは一日です。

それより、時間制限って、いつからいつまでだ？ スレッドの始まった時からＮ秒？ それとも スレッドで最後に投稿された記事からＮ秒？ どちらが妥当なのでしょうか？

2) subject: とスレッドの依存関係両方をチェックすると、 かなり偽造するのが大変になるだろうとは思う。 [1]

もっとも、たいてい message-id の方が長いことが多いから、From: 偽造よりこっちのほうが突破は難しいですかね？

でもでも、駄目駄目な message-id をつける mailer だと、逆に弱く なるけどねぇ。UNIXタイム@ホスト(FQDNじゃない) みたいなへぼいや つだと、予測する範囲がすごく小さいや。

## レシピ

1. 特定少数の人だけがスレッドをたてられるＭＬ。

1. 特定少数の人だけがスレッドをたてられるＭＬ。

これ、モデレータシステムより便利だと思うのですが、どうでしょうか？

たとえば次のような設定です。こうすると、疑似的に「スレッドをたてる小数 の人(管理者) + スレッドへのリプライをする管理者以外の人たち」という運 用になりますね。

    member_maps			=       $tmp_dir/members-thread-init

    article_post_restrictions       =       reject_system_special_accounts
                                            check_article_thread
                                            permit_member_maps
                                            isolate

注: fml8 2008/08/17 以降のバージョンでは reject ではなく isolate (SPAM の隔離)が推奨です。

まず members-thread-init に登録されている人だけは 「いつでも投稿」できます。これ以外のメンバーは、通常、投稿を拒否されます。 しかし、投稿されたメールに返信をした場合にかぎり check_article_thread 命令で投稿が許されるという仕組みです。

つまり、最初に管理者の人が話題をふる。その話題へのフォローだけはＭＬに 流れる。ようするに、管理者の人だけが「新規の話題を紹介する」ことが出来 る仕組みです。モデレータ風だけど、少し違う仕掛けです。

このほうがモデレータより簡単で便利だと思うんですが、どうですかね？

また、ネタふりをする人の認証も PGP を使うとより良いです。

    member_maps			=       $tmp_dir/members-thread-init

    article_post_restrictions       =       reject_system_special_accounts
                                            check_article_thread
                                            check_pgp_signature
                                            isolate

注: fml8 2008/08/17 以降のバージョンでは reject より isolate (SPAM の隔離)が推奨です。

### Notes

[1] | 真面目に確率計算をしてくれると、 卒論くらいに、ちょうど良いかなぁ（そうか？）。 誰かやりたい人がいたら、御一報を:-)

Prev | Home | Next
ケーススタディ: 誰でも投稿可能なＭＬ | Up | ケーススタディ: PGP/GPG の電子署名で投稿制限をするＭＬ

fml 8.0 (fml-devel) project homepage is www.fml.org/software/fml8/.
fml 4.0 project homepage is www.fml.org/software/fml4/.
about one floppy bsd routers, see www.bsdrouter.org/.
other free softwares are found at www.fml.org/software/.

author's homepage is www.fml.org/home/fukachan/.
Also, visit nuinui's world :) at www.nuinui.net.

For questions about FML, e-mail <fml-bugs@fml.org>.