themeが読み出せないサーバ

Infoseek iswebライトなどのサーバでは、cgi-bin 以下に設置しないと cgi が動作しない上、theme などの CSS ファイルがうまく読み出せないようです。その場合の対策を書きます。

theme/, public/ の設置ディレクトリを変更する

標準では、RSSなどのデータやテーマ(CSS見た目ファイル)は adiary と同一のディレクトリに置くようになっています。一部のサーバなどでは cgi-bin 以下にこれらのファイルが置けないようになっているのでこれを変更します。

例えば該当のサーバで、cgi-bin にしか cgi ファイルを置けないとすれば次のように adiary を設置します。

自分のwwwディレクトリ
  + cgi-bin
    + adiary
       + __chche/
       + data/*
       + diary.skel/*
       + info/*
       - adiary.cgi
       - adiary.conf.cgi
       - (略)
  + adiary
    + public/*
    + theme/*
  • 本体 http://---/cgi-bin/adiary/adiary.cgi
  • テーマ http://---/adiary/theme/

という状況です。

要するに adiary のファイル群の中から public/theme/ のみを違う場所に移動します。パーミッションなどはマニュアルどおりに設定してください(__chche, data/, public/ のパーミッションを0777などに)。

続いて adiary.conf.cgi を開き、次の場所を設定します。

# 公開のデータディレクトリ
<$constant(public_dir) = '../../adiary/public/'>
<$constant(theme_dir)  = '../../adiary/theme/'>

これで通常動くはずですが、問題が起きた場合はこの記事にコメントでもください。

注意

テーマ選択済のブログがあるとき、テーマディレクトリを移動すると一時的にテーマが適用されなくなります。

TeX記法の設定

mimetexのインストール

tex 記法を使えるようにするためには、mimeTeXをインストールする必要があります。標準では、adiary.cgi と同じディレクトリの mimetex/ にインストールしてください。違うディレクトリの場合は、info/textparser_tag.txt を適切に設定します。

mimeTeXを公式サイトからダウンロードします。

zipファイルを展開し、adiary.cgi と同じディレクトリに mimetex というディレクトリを作ってそこにファイルを転送します。

adiary/
  - mimetex/
    - README
    - mimetex.cgi
       :
  - data/
  - adiary.cgi
     :

バイナリを転送した場合は、mimetex.cgi に忘れずに実行属性を付けてください(パーミッション0755等)。

ソースファイルを落とした場合は、サーバに入ってコンパイルする必要があります。

$ cd mimetex
$ gcc -O2 -DAA mimetex.c gifsave.c -lm -o mimetex.cgi

レンタルサーバで使用する場合、大抵はバイナリを使用することになりますが、その場合は運営されているサーバの OS や CPU が何であるか調べる必要があります。ご注意ください(多くは Linux (i386)、さもなければ FreeBSD (i386) だとは思いますが……)。

TeX記法の注意

adiaryのタグ表記「[tex:xxxx]」の中では 「{ } [ ]」 が特殊な記号(エスケープ記号および記法タグ記号)として動作してしまうため、下付文字などを出すときに問題が発生します。エスケープ動作を行わない記法タグ[[tex:xxxx]]を使って記述してください。

(例)
【失敗例】[tex:[x^a x^b] = x^{ab}]
【成功例】[[tex:[x^a x^b] = x^{ab}]]

【失敗例】[[tex:x^{ab} = [x^a x^b]]]
【成功例】[[tex:x^{ab} = [x^a x^b] ]]  ←最後が ] で終わる場合はスペースを入れる

【失敗例】[x^a x^b] = x^ab

【成功例】[x^a x^b] = x^{ab}

【失敗例】x^{ab} = [x^a x^b]

【成功例】x^{ab} = [x^a x^b]

adiaryのセキュリティ対策

adiaryでは adiary.conf.cgi 内で設定されているセキュリティフレーズによる、各種SPAM対策、CSRF対策を行っています。ここではその対策の仕組みについて紹介します。安全なサイト運用のためにセキュリティフレーズは必ず書き換えてください

# ●以下の「秘密の言葉」を必ず書き換えてください。
<$Secret_phrase = 'すきな文字列をここに書く'>

SPAM対策

例えば、adiaryのトラックバックURLは次のようになっています。

http://adiary.org/man/09/tb/7Tv

手前から「09」は記事番号、「tb」はトラックバックを識別するための記号、「7Tv」がセキュリティーコードです

adiaryの記事番号は通し番号ですから総当たりなどの方法で適当な記事にトラックバックSPAMを送れてしまいそうです。では実際、この数字を書き換えてトラックバックを送信するとどうなるでしょうか。エラーになってしまいます。セキュリティーコードは上で設定したセキュリティーフレーズと記事番号から一定の法則で計算され、このコードが一致しないとトラックバックが送信できないようになっています。ここで大切なのことはセキュリティーフレーズが分からなければ、セキュリティーコードを計算できないということです。

では1度記事を手で確認してトラックバックURLを収集、収集したURLに自動的にトラックバックを送ろうとしたらどうなるでしょうか? 最初のうちは成功してしまいますが、1日も経てば失敗します。このセキュリティーコードは(デフォルトでは)8時間ごとに変更され、最大16時間経つと使用出来なくなります。

とすれば、SPAMロボットがトラックバックURLを認識して、即時に送信するタイプだったらどうなるでしょうか? 実はこれも難しいように作れています。試しに(ログオフした状態で)JavaScriptをオフにして記事を表示してみてください。表示が次のように切り替わるはずです。

TB-URL http://adiary.org/man/09/tb/

※お手数ですが、SPAM防止のためURLの後ろに「7Tv」を追加してください。

つまりJavaScriptを解釈できないロボットはこのメッセージを認識してトラックバックURLを構築する必要があります。よってSPAMロボットが相当賢く作ってないとトラックバックURLを知ることができません。

もちろんadiary専用のトラックバックURL解読エンジンを作られれば負けてしまいますが、それをするメリットがあるとは到底思えませんし、その手のものが登場した瞬間に対策方式を変更するのでロボット側はかなり無力です。

コメントのSPAM対策

JavaScriptオフで記事を表示させた人は気づいたと思いますが、コメント欄にも同様のSPAM対策が施されています。公式 http://blog.abk.nu に幾度となくSPAMロボットがやってきていますが、(対策以後)ロボットが書き込みに成功した例はありません。

CSRF対策

いわゆるCSRF攻撃対策のためにも、セキュリティフレーズが使われています。ログイン時に発行されるランダムな文字列である session_id とセキュリティーフレーズを使ってセキュリティーコードを生成しています。このセキュリティーコードはフォームを送信する際に必ず埋め込まれ、この値が一致しない限りフォームを受け付けない仕組みになっています。

ただし弊害として、日記を書いている最中にログアウトしてログインし直すと、日記を投稿するのにリロードが必要になります。

タグ、JavaScript対策

フォームを処理する時点で、タグの除去には細心の注意を払っています。いかなる場面でも利用出来るタグは制限されていますし、コメント欄ではタグなどは一切書けません。

JavaScriptが一切記述出来ず、個人で利用するにはやや制限がキツいこともありますので、その場合はタグの利用制限を外す方法をお試しください。