記事本文
複数の weblog を作成するということ
Movable Type による weblog を、複数作成するという場合があります。 カテゴリよりももっと大きい範囲での分類を行いたい場合や、それぞれで異なるテンプレートを使いたい場合など、その理由は様々です。
さて、そういった場合における weblog の検索機能についてちょっと考えてみたいと思います。
weblog ごとに検索結果のテンプレートを変更したい
weblog を一つしか作成していない場合、検索結果のテンプレートは install directory/search_tamplates/default.tmpl で制御されます。
これは管理画面のテンプレート一覧には現れないため、検索結果テンプレートをカスタマイズしたい場合はローカルで直接変更を加える必要があります。 そのためか、テンプレートをオリジナルの物に変更している場合でも、検索結果だけはデフォルトのまま、という weblog もたまに見かけます。
では、複数の weblog を作成している場合はどうするのか ? default.tmpl をカスタマイズしただけでは、どの weblog から検索しても同じ検索結果テンプレートになってしまうのではないか ?
サイト全体の検索 - 代替テンプレートを見ると、 weblog ごとに検索結果テンプレートを割り当てる方法が書かれています。
AltTemplate を使って weblog ごとに検索結果のテンプレートを変更にて具体的な手順を解説しています。
また、テンプレートを各 weblog に割り当てるほど区別する必要はないが、スタイルだけは区別したいという場合は、 link 要素で読み込むスタイルシートの名前を
styles-site-<$MTBlogID$>.css
といった名前にすることや、
<body id="id-<$MTBlogID$>">
と指定して body 要素に id を割り当てるといったテクニックも使えます。
複数の weblog の内容を一斉に検索したい
デフォルトテンプレートの検索フォーム周りを見ると、
<form method="get" action="<$MTCGIPath$><$MTSearchScript$>">
<input type="hidden" name="IncludeBlogs" value="<$MTBlogID$>" />
<label for="search" accesskey="4">このサイトの検索</label><br />
<input id="search" name="search" size="20" /><br />
<input type="submit" value="検索" />
</form>
となっています。
これは
input type="hidden" name="IncludeBlogs"
で送信している MTBlogID の weblog だけを検索するという指定です。
しかし、 install directory/search_tamplates/default.tmpl の方では
<form method="post" action="<$MTCGIPath$><$MTSearchScript$>">
<h3 class="title">Search this site:</h3>
<div class="comments-body">
<input type="text" size="30" name="search" value="<$MTSearchString$>" /> <input type="submit" value="Search" /><br/><br />
<input type="checkbox" name="CaseSearch" /> Match case <input type="checkbox" name="RegexSearch" /> Regex search<br/><br />
</div>
</form>
のように、 IncludeBlogs の絞込みを行っていません。
よって、もし各記事から直接全部の weblog の検索を行いたい場合、各テンプレートの検索フォーム部分から
<input type="hidden" name="IncludeBlogs" value="<$MTBlogID$>" />
の行を削除しておくと良いでしょう。
逆に、一度検索をした後 ( = default.tmpl による検索結果テンプレートを呼び出した後 ) も引き続き特定の weblog のみを検索範囲としたい場合は、 install directory/search_tamplates/default.tmpl の検索フォーム部分に
<input type="hidden" name="IncludeBlogs" value="<$MTBlogID$>" />
の行を追加しておくと良いでしょう。
検索対象とする weblog を指定したい
次に、全部の weblog を検索する必要はないけど、でも複数の weblog に跨った検索をしたい、という場合。 IncludeBlogs を検索時に任意で指定することで実現できます。
<dl>
<dt>検索対象とする weblog</dt>
<dd>
<ul>
<li><label for="include-weblog"><input type="checkbox" name="IncludeBlogs" id="include-weblog" value="1" />Weblog hxxks</label></li>
<li><label for="include-mt"><input type="checkbox" name="IncludeBlogs" id="include-mt" value="2" />MT hxxks</label></li>
<li><label for="include-www"><input type="checkbox" name="IncludeBlogs" id="include-www" value="3" />WWW hxxks</label></li>
<li><label for="include-memo"><input type="checkbox" name="IncludeBlogs" id="include-memo" value="4" />xxxk memo</label></li>
<li><label for="include-bookmark"><input type="checkbox" name="IncludeBlogs" id="include-bookmark" value="12" />xxxkmark</label></li>
<li><label for="include-forum"><input type="checkbox" name="IncludeBlogs" id="include-forum" value="13" />TuneDoc ver.2</label></li>
</ul>
</dd>
</dl>
チェックボックスを用いることで、検索範囲を柔軟に指定することができます。 また、 IncludeBlogs ではなく ExcludeBlogs を用いると、「検索対象から除外する」という指定もできます。
非公開の weblog を作成している場合の注意点
これが今回の最も重要なポイントとなる項です。 複数の weblog を作成する動機に、「公開用の weblog と非公開の自分用 weblog 」というものがあった場合に大いに関係してきます。
公開用の weblog とは別に非公開の weblog を作成し、そこに個人的な情報を書き込んでいたり、また完成に至っていない草稿などを置いていたりするかもしれません。 そういった時に、その weblog を設置しているディレクトリに対して BASIC 認証をかけて保護するようなケースが想定されます。 ( というか私がそうしていました。 )
そういった場合に複数の weblog の内容を一斉に検索するようにしていた場合、ディレクトリ自体に BASIC 認証をかけていても、検索結果として表示することは可能という現象が起こります。
BASIC 認証をかけているから大丈夫だろうと、友人の本名や住所やその他多くの個人情報をその非公開 weblog にメモしていたとします。 このとき、検索者が意図していようと意図していまいとに関わらず、検索キーワードがその情報の一部にマッチした場合、その内容をデータベースから取得して認証のかかっていない部分へ検索結果として表示する可能性があるということになります。
対応策としては、初めからそういった情報を Movable Type で管理しないというのが最も有効な策ですが、よんどころない事情で Movable Type で管理しなければならない場合も、もしかしたらあるかもしれません。 その場合、さらに 2 つの対応策が考えられます。
- 記事を下書き状態にする
-
下書き状態の記事は検索範囲に含まれないため、検索キーワードの誤爆マッチによる漏洩は防げます。 最も、そこまでするならやはり Movable Type で管理する意義が無くなってしまいますが。
- 概要を任意の文字で書いておく
-
記事の概要欄に、例えば Administrator only と書いておき、 default.tmpl の
<MTSearchResults> 〜 </MTSearchResults>内の検索結果を<$MTEntryExcerpt$>で表示するようにすれば、仮に検索キーワードがマッチしても検索結果は Administrator only としか表示されません。
まとめ
何故ここまで細かく書いて説明するのかというと、実際に自分の weblog で色々試している時に、 BASIC 認証をかけているはずの管理用 weblog の内容が検索結果に現れたからでした。 現在は管理用 weblog は対応を施していますが、このことに気付かなければ、秘匿すべき個人情報というレベルではないにしろ、ある程度重要度の高い情報が漏洩してしまっていたのかもしれません。
実際にこういったケースはほとんど無いと思いますが、そういった情報を入手しようという意図の無い閲覧者が、
<input type="hidden" name="IncludeBlogs" value="<$MTBlogID$>" />
による検索対象の制限をしておらず、また何の疑いも無く BASIC 認証だけに頼って重要な機密情報を WWW に置いて Movable Type で管理している企業等の情報をうっかり得てしまったら ?
厳密に言ってしまえば、悪意の無いままに不正アクセス禁止法に抵触してしまう可能性だってゼロとは言い切れないのです。
- 複数の weblog を Movable Type で作成している
- そのうちのひとつ以上の weblog に、無造作に重要な情報を記録している
- IncludeBlogs や ExcludeBlogs による検索対象の絞込みを行っていない
- default.tmpl の
<MTSearchResults> 〜 </MTSearchResults>に<$MTEntryBody$>を使っている- または
<$MTEntryExcerpt$>を指定していても、記事側で概要を書いていない
- または
- 検索者が、重要な情報にマッチする検索キーワードを入力する
または、
- weblog を Movable Type で作成し、その中に BASIC 認証をかけたカテゴリを設けて、重要な情報を記録している
- default.tmpl の
<MTSearchResults> 〜 </MTSearchResults>に<$MTEntryBody$>を使っている- または
<$MTEntryExcerpt$>を指定していても、記事側で概要を書いていない
- または
- 検索者が、重要な情報にマッチする検索キーワードを入力する
これらの条件のどちらかに当てはまれば、パスワードクラックやパスワードの不正入手をすることなく、また悪意のあるなしに関わらず重要な情報を得ることができてしまいます。
デフォルトの検索テンプレートでは、 MTEntryExcerpt を検索結果として表示するようになっているため、記事の先頭部分に重要な情報を記録していると、その可能性は高くなります。
そして、それは
アクセス制御機能を有する特定電子計算機に電気通信回線を通じて当該アクセス制御機能による特定利用の制限を免れることができる情報(識別符号であるものを除く。)又は指令を入力して当該特定電子計算機を作動させ、その制限されている特定利用をし得る状態にさせる行為
に該当するのではと思います。
もっとも、この場合はシステムパッケージにデフォルトで含まれている検索機能の穴……と言うよりも仕様によるものなので、該当しないのかもしれません。
データベースの中を検索するため、通常の記事作成で生成されるものに認証をかけていても、検索では出力されるということは自然なことかもしれませんし。
( この辺りは検索システムや法律に詳しい方の見識を求めたいです。 )
確率としては非常に低いのですが、情報保持者がずさんな情報管理を行っていても、情報にアクセスしてしまった人が実際に摘発された前例がある以上、そういった事が起こらないとは言いきれないと、頭の片隅に留めておいた方が良いかもしれません。

