<!-- -*- mode:text coding:euc-jp -*-
   $FML: post_check_article_thread.sgml,v 1.6 2008/08/18 02:23:59 fukachan Exp $
-->


<sect1 id="config.post.check.article.thread">
	<title>
	ケーススタディ: フォローする場合なら誰でも投稿可能なＭＬ
	</title>

<para>
「メンバー以外からの投稿」
を受けて
「投稿が拒否される」ケースが、けっこうあります。
</para>

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

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

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


<sect2>
	<title>
	レシピ
	</title>

<qandaset>

<qandaentry>

<question>
<para>
フォローする場合なら誰でも投稿可能なＭＬ
</para>
</question>

<answer>

<para>
設定例は次のようになります。
check_article_thread が、このオプションです。
<screen>
article_post_restrictions       =       reject_system_special_accounts
                                        check_article_thread
                                        permit_member_maps
                                        reject
</screen>
これをデフォルト設定にしておいたほうが便利な気もしますが、いまのところ、
そういう設定になっていません。
この機能を利用したい場合、明示的に article_post_restrictions を変更して下さい。
</para>

<para>
注: &fml8; 2008/08/17 以降のバージョンでは isolate (SPAM の隔離)が推奨です。
<screen>
article_post_restrictions       =       isolate_system_special_accounts
                                        check_article_thread
                                        permit_member_maps
                                        isolate
</screen>
</para>

</answer>

</qandaentry>

</qandaset>

</sect2>


<sect2>
	<title>
	議論
	</title>

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

<para>
1) 許す時間の長さを、どのくらいまで短くするのが適正か？
<screen>
article_post_article_thread_lifetime = 86400
</screen>
$article_post_article_thread_lifetime
という変数で制御できるようにしてみました。
デフォルト値は一日です。
</para>

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

<para>
2) subject: とスレッドの依存関係両方をチェックすると、
   かなり偽造するのが大変になるだろうと思います。
<footnote>
<para>
真面目に確率計算をしてくれると、
卒論くらいに、ちょうど良いかなぁ（そうか？）。
誰かやりたい人がいたら、御一報を:-)
</para>
</footnote>
</para>

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

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

</sect2>


<sect2>
	<title>
	レシピ
	</title>

<qandaset>
<qandaentry>

<question>
<para>
特定少数の人だけがスレッドをたてられるＭＬ。
</para>

</question>

<answer>

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

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

<para>
<screen>
member_maps			=       $tmp_dir/members-thread-init

article_post_restrictions       =       reject_system_special_accounts
                                        check_article_thread
                                        permit_member_maps
                                        isolate
</screen>
注: &fml8; 2008/08/17 以降のバージョンでは
reject ではなく isolate (SPAM の隔離)が推奨です。
</para>

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

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

<para>
このほうがモデレータより簡単で便利だと思うんですが、どうでしょうか？
</para>

<para>
なお、ネタふりをする人の認証も PGP を使うとより良いでしょう。
<screen>
member_maps			=       $tmp_dir/members-thread-init

article_post_restrictions       =       reject_system_special_accounts
                                        check_article_thread
                                        check_pgp_signature
                                        isolate
</screen>
注: &fml8; 2008/08/17 以降のバージョンでは
reject より isolate (SPAM の隔離)が推奨です。
</para>

</answer>

</qandaentry>

</qandaset>

</sect2>


</sect1>
