at posts/single.html

base_url の設定プラグイン (もどき)

tDiaryの脆弱性に関する報告(2007-07-23)を受けての今なら conf.base_url を設定画面から変更できるようにするパッチを書くと…という話。

とはいえ、 base_url をわざわざ設定するのは面倒。 問題は base_url 中の SERVER_NAME が書き換えられるということなので、以下のようにしてみた。

  • 日記の設置者が設定画面を開く
  • 設定画面の SERVER_NAME を選択し、内容を確認して OK ボタンをクリックする
  • その時の SERVER_NAME が tdiary.conf に保存される
  • 日記の閲覧時に、 SERVER_NAME を保存した値に書き換える
add_conf_proc('server_name', 'SERVER_NAME') do
  if @mode == 'saveconf'
    @conf['server_name'] = ENV['SERVER_NAME']
    "Thank you."
  else
    "SERVER_NAME is #{ENV['SERVER_NAME']}. If correct, please press 'OK'"
  end
end

@conf.instance_eval { alias :base_url_org :base_url }
def @conf.base_url
  base_url_org.gsub(%r|(https?://)([^:/]+)|, "\\1#{self['server_name']}")
end

正規表現はちょっと自信ない。 本当は update.rb から index.rb の base_url が取得できるといいんだけど。 @index は相対パスっぽいからなぁ。

関連する日記