設定ファイル

サンプルの説明でおよそわかるものは省略します。

重要項目

v.trust_mode

trust_modeは、記事やHTML中のタグ制限を無効にするモードです

adiaryのアカウントが乗っ取られた際に、同一サーバ上の他のWebサービスに対して致命的なセキュリティホールとなります。任意の<script>タグを貼り付けたいこともあると思いますが、多くの場合は「v.admin_trust_mode」で足りると思います。

v.admin_trust_mode

管理者アカウントのみtrust_modeで処理します。標準でonに設定されています。この値を設定するときは v.trust_mode はオフにしてください。

この設定を有効にすると、管理者アカウントが乗っ取られた際に同一ドメイン上のすべてのWebサービスに対してセキュリティーホールとなります。またhttp://blog.abk.nu/のように第3者にレンタルする場合は、設定しないことをおすすめします。

また、この設定が有効な時、管理者アカウントでブログを再構築するとブログIDと同一のユーザーIDがある場合はそのアカウントが管理者であるか参照しtrust_modeを設定、存在しないときはtrust_modeで処理されます。(Ver3.02以降)

v.total_max_size

記事データをインポートしたり、画像ファイルをアップロードする際の、1回のPOST(送信)あたりの最大サイズになります。*1

ここでいくら値を大きくしてもApacheやシステム側で制限がかかっていることがあります(RLimitMem等)。*2

v.album_font

アルバム機能で画像以外をアップロードすると、アイコン画像を自動的に生成し、そこにファイル名やファイルサイズなどを埋め込みます。そのとき使用するフォントファイルを指定しています。

adiary本体にはこの機能のために VLGothic が同梱されていますが、他のフォントに差し替えたい時に変更してください。

*1 : あまりに大きい値はDoS攻撃の標的となりますが、ログインしてない場合は「64KB」が標準で設定されています。

*2 : 特にFastCGIを利用する場合は、fcgid固有の設定もありますので注意してください。

その他の項目

Secure_time

セキュリティIDの有効期限です。

adiaryではコメントSPAMに対抗するため、コメント投稿フォームにセキュリティーkeyを発行し、その値を使って投稿されているか確認しています。このセキュリティーkeyは「Secure_time」で指定した時間ごとに切り替わります。1つ前のセキュリティーkeyまで有効ですので、例えば6時間に設定すれば「表示したコメント投稿フォームは最低6時間、最長12時間は有効」ということになります。

外部DBの設定

外部DBとしてMySQLやPostgreSQLを使用する場合の設定です。いずれにせよ「DB=」の設定は一つのみ有効にしてください(外部DBを有効にする際、テキストDBをコメントアウトするのを忘れずに)。

CGI動作時はDBモジュールのロードで動作が遅くなるため、キャッシュ環境以外では外部DBの使用はあまりおすすめできません。

# PostgreSQL の場合(データベース名、ユーザー名、パスワード)
#<$DB = loadpm('DB_pg', 'database=adiary', 'adiary', 'test', {Pool=>1} )>
#<$DB = loadpm('DB_pg', 'database=adiary;host=pgsql.example.com', 'adiary', 'test', {Pool=>1})>

# MySQL の場合(データベース名、ユーザー名、パスワード)
#<$DB = loadpm('DB_mysql', 'database=adiary', 'adiary', 'test', {Pool=>1})>
#<$DB = loadpm('DB_mysql', 'database=adiary;host=mysql.example.com', 'adiary', 'test', {Pool=>1})>
#<$DB = loadpm('DB_mysql', 'database=adiary;host=mysql.example.com;port=3306', 'adiary', 'test', {Pool=>1})>

{Pool=1}はCGI以外の動作環境のとき、DBとの接続を保存して(接続したままにして)次回実行時に再利用する設定になります。外部DBは接続時のコストがとても大きいため、このような仕組みが備わっています。

Auth.expires

ログインセッションの有効期限です。一度ログインするとここで指定してた期間だけ「ログインしたまま」になります。サンプルはデフォルトの設定値です。

Auth.max_sessions

同一アカウントでいくつまで同時ログインを許可するかという設定です。標準は「1」になっています。

Ver3.03以前では「Auth.multisession」になっていますが、multisessionの設定は動作していませんでした。

Auth.all_logout

多重ログイン許可時、1ヶ所からでもログアウトしたら同じIDのアカウントはすべてログアウトする設定です。セッションの乗っ取りやログインしたままの端末を紛失したときなどに、強制ログアウトさせるなどの効果があります。

Auth.allow_ip/host

  • ログインできるIP/HOSTを設定します。未設定時はすべて許可になります。
  • IP/HOSTはどちらか一方の条件をクリアすれば許可されます。
  • ipは前方一致、hostは後方一致で確認します。

サンプル。

  • 192.168 や 192.168. は 192.168.0.1 にマッチ。
  • 172.16 や 172.16. は 172.160.0.1 や 10.0.172.16 にマッチしない。
  • example.jp は example.jp や test.example.jp にマッチ。
  • example.jp は test-example.jp にはマッチしない。
  • .example.jp は example.jp にはマッチしない。
  • .example.jp は test.example.jp にマッチ。

Auth.admin_allow_ip/host

管理者になれるIP/HOSTを設定します。この条件を満たさないと、例えユーザー情報として管理者が設定されていても、管理者にはなれません。ログインは出来ます。

設定方法は Auth.allow_ip の項目と同じです。

Auth.admin_list

管理者になれるIDを設定します。この条件を満たさないと、例えユーザー情報として管理者が設定されていても、管理者にはなれません。ログインは出来ます。

設定例。

<$Auth.admin_list = flagq(admin)>
<$Auth.admin_list = flagq(admin root)>

Auth.table

DBモジュールでユーザー管理に使用するテーブル名を指定します。

デフォルトでは「_users」が指定されています。変更しても問題ありませんが「_」で始まるテーブル名にしてください。*3

Form_options

フォームの制限を設定します。以下はVer3.02のサンプルです。

<$If_post_exec_pre = begin>
	# このサイズは記事データなどの最大サイズ(byte)になります
	<$Form_options.total_max_size = if(Auth.ok, 256K, 64K)>
	<$Form_options.str_max_chars  = 80>  ※文字数
	<$Form_options.txt_max_chars  =  0>  ※文字数(0=無制限/Ver3.02以降)
<$end>
  • total_max_sizeはフォームの最大値(byte)です。
  • str_max_charsは「テキストエリア以外(一行入力部分)」の最大文字数です。
  • txt_max_charsは「テキストエリア」の最大文字数です。問題になるのは記事入力部分だと思います。Ver3.01までのadiaryでは64K(65536)文字に制限されていました。

DoS攻撃に対する保護手段の一つとしてフォームの最大サイズを制限しています。

画像アルバムでの制限は「v.uplaod_files_max」を変更してください。

*3 : blogの管理テーブルが「_」以外で始まるので、こうすることで重複を防いでいます。